我有一个非常大的文本文件,我的iPad程序需要偶尔替换一行数据(换行符:'\ n')。我怎样才能有效地做到这一点?一次写入整个文件不是一种选择。
我一直在研究NSFileHandle,看起来它会做我想做的事情;现在我无法弄清楚如何找到X行,然后用字符串中的数据替换它。我想在完成之后,我需要做的就是调用synchronizeFile,对吗?
感谢您的帮助!
答案 0 :(得分:1)
如果不编写整个文件,就无法真正做到这一点。您可以寻找行的开头,然后编写新行。但首先你必须找出那条线的偏移量。如果您还没有这意味着从头到尾读取文件。然后您可以编写新行,但前提是它与原始行的长度完全相同。如果它更长,它将覆盖下一行 - 没有办法将数据插入文件。如果新行比旧行短,则旧行的末尾将保留。相同的长度要求也很棘手。这意味着相同的字节长度。根据字符编码,某些字符可能需要比其他字符更多的字节。
如果你真的需要这样做并让它适用于所有情况,你必须使用这些步骤:
无论线条有多长或多短或如何编码,此算法都可以使用。但这可能比写出整个文件更昂贵,特别是如果你把它放在内存中的话。
您是否确实已经确认写出整个文件是不可接受的,或者您是否在此处进行过早优化?如果您的文本文件非常大,那么您应该考虑使用SQLite等数据库,或者使用Core Data。