如何在Swift或Objective C中将文本预置到文件?

时间:2017-02-15 22:07:14

标签: objective-c swift prepend filehandle nsfilehandle

请注意,我不是在询问如何在文件末尾添加文本。我问的是如何将文本添加到文件的开头。

let handle = try FileHandle(forWritingTo: someFile)
//handle.seekToEndOfFile() // This is for appending
handle.seek(toFileOffset: 0) // Me trying to seek to the beginning of file
handle.write(content)
handle.closeFile()

好像我的content写在文件的开头,但它只是取代了现有的同意......谢谢!

2 个答案:

答案 0 :(得分:4)

一个合理的解决方案是将新内容写入临时文件,然后将现有内容附加到临时文件的末尾。然后将临时文件移到旧文件上。

当您在现有文件中寻找某个点然后执行写入时,将从该点覆盖现有内容。这就是您当前的方法失败的原因。

答案 1 :(得分:3)

通常,大多数文件系统都没有内置支持将数据预先添加到文件中。同样,大多数文件I / O API都没有。

为了预先添加数据,首先必须将所有现有数据沿文件进一步移位,以便在开始时为新数据腾出空间。您通常通过在结尾附近开始,读取一大块数据,将数据写入原始位置加上您希望最终添加的数据长度,然后重复下一个接近文件开头的块来完成此操作。通过这种方式,您逐渐将所有内容都降低了。只有在完成所有这些操作后,才能安全地在文件开头写入新数据。

坦率地说,如果有任何办法可以避免这种情况,你应该尝试。如果文件很大和/或您经常这样做,性能可能会很糟糕。