如何在使用r+模式打开时删除文件的内容



我已经使用r+模式打开了我的文件。我对它做了一些修改,我想删除从X开始到文件末尾的内容。

不幸的是,我不知道该怎么做。我一直在浏览文档,但没有提到这一点。

我不想把:space:写入文件,所以它"看起来"像是被清除了,我想把它变小。

在这种情况下,使用w打开文件不是一个选项。

r+模式打开文件保留当前内容;因此,我认为没有办法使用Lua中可用的函数截断文件的其余部分。这个SO答案表明它可以使用reopenw+来完成,但是既然你表示你不能打开它进行写作,我认为没有办法做你想做的

对该脚本进行测试产生new contentext(其中ext是先前内容的剩余部分):

local f = io.open("somefile", "w")
f:write("some long text")
f:close()
local f = io.open("somefile", "r+")
f:write("new content")
f:close()

根据我的经验,我发现在Lua中截断文件的唯一方法是以"w+"模式将内容写入辅助文件,然后重命名辅助文件以覆盖原始文件。当然,根据文件的大小,您可能希望谨慎地使用此方法。

在本例中,"path"是原始文件

的路径
local file, err = io.open( path + ".tmp", "w+" )
if not file then return end
file:write( truncated_data )
file:close( )
assert( os.rename( path + ".tmp", path ) )

相关内容

  • 没有找到相关文章

最新更新