我尝试更新文件的某些部分而不删除或覆盖其他所有部分,但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.
~$
Run Code Online (Sandbox Code Playgroud)