[英]Overwrite Data using NSFileHandle
使用NSFileHandle,使用truncateFileAtOffset从文件末尾删除n个字符非常容易。
-(void)removeCharacters:(int)numberOfCharacters fromEndOfFile:(NSFileHandle*)fileHandle {
unsigned long long fileLength = [fileHandle seekToEndOfFile];
[fileHandle truncateFileAtOffset:fileLength - numberOfCharacters];
}
但是,如果不必将所有剩余数据复制到内存中,覆盖文件然后将剩余数据写回文件,则无法从文件前面删除字符。
-(void)removeCharacters:(int)numberOfCharacters fromBeginningOfFile:(NSFileHandle*)fileHandle {
[fileHandle seekToFileOffset:numberOfCharacters];
NSData *remainingData = [fileHandle readDataToEndOfFile];
[fileHandle truncateFileAtOffset:0];
[fileHandle writeData:remainingData];
}
此代码有效,但将成为大文件的责任。 我错过了什么?
理想情况下,我希望能够执行replaceCharactersInRange:withData:
在使用NSFileHandle进行更多游戏后,很明显无法覆盖的插入是不可能的。
如下所述: 使用目标c在文本文件中的指定行插入一个字符串 “ 你只能在最后生成一个文件;而不是在中间。 ”
以下是上述代码的稍微优化版本:
-(void)removeCharacters:(unsigned long long)numberOfCharacters fromBeginningOfFile:(NSFileHandle*)fileHandle {
[fileHandle seekToFileOffset:numberOfCharacters];
NSData *remainingData = [fileHandle readDataToEndOfFile];
[fileHandle seekToFileOffset:0];
[fileHandle writeData:remainingData];
[fileHandle truncateFileAtOffset:remainingData.length];
}
我更复杂的解决方案是将文件缓冲到块中的另一个文件中。 这将减轻内存问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.