Lua: Обновление частей файла в стиле hex-редактора - PullRequest
2 голосов
/ 05 февраля 2012

Я пытаюсь обновить некоторые части файла, не удаляя и не перезаписывая все остальное, однако режимы чтения / записи в Lua, похоже, поддерживают только добавление данных, удаление существующих данных и запись новых. Вот пример:

testfile.pak: "На улице холодно" -> "На улице тепло"

Теперь я имею дело с довольно большими файлами, а не с текстовыми файлами, поэтому чтение их в память и просто использование функций манипуляции со строками здесь не подходит. Кроме того, я уже обрабатываю файлы как часть программы, поэтому я не хочу добавлять к накладным расходам, перечитывая их до необходимой точки, вставляя данные и записывая остальные. Для этого потребуется вдвое больше места на жестком диске, а также вдвое больше времени. Я также не могу записать необходимые данные в первом цикле обработки. Поэтому мне интересно, можно ли просто сказать Lua записать с определенным смещением в файл, не создавая временный файл или дубликат, вроде того, как hex-редактор может изменять определенные части файлов без необходимости чтобы сохранить новую копию файла. Есть ли другие - может быть недокументированные - варианты записи для io.open, кроме "w", "w +", "a" и "a +"?

1 Ответ

6 голосов
/ 05 февраля 2012

Вы можете сделать это в режиме «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.
~$ 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...