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