Используя NSFileHandle, довольно легко удалить n количество символов из конца файла с помощью truncateFileAtOffset.
-(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: