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

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

不幸的是,我不知道如何做到这一点。 我已经浏览了文档,但没有提到这一点。

我不想将 :space: 写入文件,这样它就会“看起来”被清除了,我也想让它变小。

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

点赞
用户1442917
用户1442917

使用 r+ 模式打开文件会保留当前的内容;因此,在 Lua 中可用的函数中,我不认为有一种方法可以截断文件的其余部分。 这个 SO 回答 指出可以使用具有 w+reopen 来实现,但由于您表示无法以写入模式打开它,我不认为有方法做到您所想要的

对该脚本进行测试会产生 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()
2015-09-28 15:24:36
用户9216142
用户9216142

根据我的经验,在 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 ) )
2018-05-09 05:27:32