请注意,我不会问如何在文件末尾附加文本。我要问如何将文本预定到文件的开头。
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
在文件的开头写了,但它也替代了现有的同意...谢谢!
一个合理的解决方案是将新内容写入临时文件,然后将现有内容附加到临时文件的末尾。然后将临时文件移到旧文件中。
当您寻求在现有文件中的点然后执行写入时,现有内容将从此点覆盖。这就是您当前方法失败的原因。
通常,大多数文件系统都没有内置的支持数据将数据预备到文件。同样,大多数文件I/O API也不。
为了预处数据,您首先必须将所有现有数据沿文件移动,以便在开始时为新数据腾出空间。通常,您可以通过接近末端开始,读取大量数据,将数据写入原始位置加上您希望最终预先预留的数据的长度,然后重复下一个块,更接近文件的开头。这样,您会逐渐将所有内容转移。只有在完成所有操作之后,您才能安全地在文件开头编写新数据。
坦率地说,如果有任何方法可以避免这种情况,您应该尝试。如果文件大和/或您经常进行的性能可能会很糟糕。