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

时间:2015-09-28 14:59:03

标签: file file-io lua file-manipulation

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

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

我不想将:space:写入文件,因此它看起来像#34;就像它被清除一样,我也希望它变得更小。

在这种情况下,不能使用w打开文件。

2 个答案:

答案 0 :(得分:2)

<script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-******-1']); _gaq.push(['_trackPageview']); (function () { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> 模式打开文件会保留当前内容;结果,我认为没有办法使用Lua中可用的功能截断文件的其余部分。这个SO answer表示可以使用r+ reopen来完成,但由于您表示无法打开它进行写作,我认为没有做你想做的事

对此脚本进行测试会产生w+(其中new contentext是早期内容的剩余部分):

ext

答案 1 :(得分:0)

根据我的经验,我发现在 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 ) )