Lua:像十六进制编辑器一样更新文件的部分内容。

我试图更新文件的某些部分,而不会删除或覆盖其他所有内容,然而Lua的读/写模式似乎只支持追加数据或删除现有数据并写入新数据。这是一个例子:

testfile.pak:“外面很冷”->“外面很暖和”

现在,我处理的文件相当大,不是文本文件,因此将它们读入内存并仅使用字符串操作函数在这里不是选择。此外,我已经在程序的一部分中处理文件,因此我不想通过重新读取它们来增加开销到必要的位置,插入数据并写入剩余部分。这将需要两倍的硬盘空间和两倍的时间。我也无法在第一次处理周期中写入必要的数据。因此,我想知道是否可能仅告诉Lua在文件的特定偏移量处写入而无需创建临时文件或副本,就像十六进制编辑器能够更改文件的特定部分而无需保存整个文件的新副本一样。除了“w”,“w +”,“a”和“a +”之外,io.open是否有其他-可能是未记录的-写入选项?

原文链接 https://stackoverflow.com/questions/9150597

点赞
stackoverflow用户111886
stackoverflow用户111886

你可以用 "r+" 模式来做到:

~$ cat > test.dat
It's cold outside.
~$ lua
Lua 5.1.4  版权所有 (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.
~$
2012-02-05 16:03:56