如何在 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 中的电子邮件代理中获取收件箱?