如何在 Swift 或 Objective C 中将文本添加到文件中?

Posted

技术标签:

【中文标题】如何在 Swift 或 Objective C 中将文本添加到文件中?【英文标题】:How to PREPEND text to a file in Swift or Objective C? 【发布时间】:2017-02-15 22:07:13 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

一般来说,大多数文件系统没有内置支持将数据添加到文件中。同样,大多数文件 I/O API 也没有。

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

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

【讨论】:

是的,我在 Linux 中找到了一个很好的方法,就像 echo "text to prepend $(cat file.txt)" > file.txt,但就像你说的,这并不简单。

以上是关于如何在 Swift 或 Objective C 中将文本添加到文件中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS Swift 或 Objective C 中检测 iPhone 卷访问 [关闭]

如何使用 mailcore 框架或任何框架从 swift/objective c 中的电子邮件代理中获取收件箱?

从服务器 Objective C 或 Swift 下载文件

如何直接为警报注册通知,而不仅仅是横幅? XCode 中的 Swift 或 Objective C

在 C/C++ 中使用 swift 库?

如何在objective c框架中使用swift扩展