我尝试更新文件的某些部分而不删除或覆盖其他所有内容,但是 Lua 的读/写模式似乎只支持附加数据或删除现有数据并写入新数据。这是一个例子:
testfile.pak: "外面很冷"--> "外面很暖和"
现在,我正在处理相当大的文件,而不是文本文件,因此将它们读入内存并仅使用字符串操作函数在这里没有选择。此外,我已经将文件作为程序的一部分进行处理,所以我不想通过重新读取文件到必要的点来增加开销,插入数据并写入其余部分。这将需要两倍的 HDD 空间和两倍的时间。我也无法在第一个处理周期中写入必要的数据。所以我想知道是否有可能只告诉 Lua 写入文件中的某个偏移量而不必创建临时文件或副本,有点像十六进制编辑器能够更改文件的特定部分而无需保存文件的全新副本。除了“w”、“w+”、“a”和“a+”之外,是否还有其他 - 可能未记录 - 为 io.open 编写选项?
最佳答案
您可以使用“r+”模式来完成:
~$ cat > test.dat
It's cold outside.
~$ lua
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> f = io.open('test.dat', 'r+')
> f:seek("set", 5)
> f:write("warm")
> f:close()
>
~$ cat test.dat
It's warm outside.
~$
关于file - Lua:更新文件十六进制编辑器样式的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9150597/