file - Lua:更新文件十六进制编辑器样式的部分

标签 file lua

我尝试更新文件的某些部分而不删除或覆盖其他所有内容,但是 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/

相关文章:

bash - 循环遍历具有特定扩展名的所有文件

c++ - 组合 Lua 二进制文件

lua - `table.insert` 如何处理 Lua 中的自定义表

c++ - 在 netbeans IDE 中将 "media"文件添加到 c/c++ 项目的适当方法

java - 文件迭代不适用于资源文件夹?

Lua require 不适用于目录

nginx - 配置 nginx 以使用 key 从 redis 获取 url 并将 url 代理到其他服务器

multithreading - Lua 5.2.2线程中断系统

ruby - 如何增加写入ruby文件的计数器

java - 如何在写入文件时压缩文件?