2017-02-15 49 views
1

请注意,我不问如何在文件末尾添加文本。我在问如何将文本预先添加到文件的开头。如何将文本预处理到Swift或Objective C中的文件?

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是在文件的开头写入,但它只是替换现有的同意,以及...谢谢!

回答

3

一般来说,大多数文件系统没有内置的支持将数据预先存入文件。同样,大多数文件I/O API也不是。

为了预先存储数据,首先必须将所有现有数据沿文件进一步移动,以便在开始时为新数据腾出空间。您通常会在接近尾声时开始读取数据,将数据写入原始位置加上您希望最终预先添加的数据长度,然后使用接近文件开头的下一个块重复执行此操作。这样,你逐渐将所有东西都转移了下来。只有在完成所有这些后,才能安全地将新数据安全地写入文件的开头。

坦率地说,如果有什么办法可以避免这种情况,您应该尝试。如果文件很大并且/或者您经常这样做,则性能可能会很差。

+0

是的,我发现一个非常好的方式来在Linux中执行它,就像'echo“文本预先加载$(cat file.txt)”> file.txt'一样,但是正如你所说的那样,这并不简单。 – 7ball

3

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

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

相关问题