Używając NSFileHandle, całkiem łatwo jest usunąć liczbę znaków n z końca pliku, używając polecenia truncateFileAtOffset.Nadpisywanie danych przy użyciu NSFileHandle
-(void)removeCharacters:(int)numberOfCharacters fromEndOfFile:(NSFileHandle*)fileHandle {
unsigned long long fileLength = [fileHandle seekToEndOfFile];
[fileHandle truncateFileAtOffset:fileLength - numberOfCharacters];
}
Jednak usuwanie znaków z przodu plik nie wydaje się możliwe bez konieczności kopiowania wszystkich pozostałych danych do pamięci, zastępując plik, a następnie pisemnie pozostałych danych z powrotem do pliku.
-(void)removeCharacters:(int)numberOfCharacters fromBeginningOfFile:(NSFileHandle*)fileHandle {
[fileHandle seekToFileOffset:numberOfCharacters];
NSData *remainingData = [fileHandle readDataToEndOfFile];
[fileHandle truncateFileAtOffset:0];
[fileHandle writeData:remainingData];
}
Ten kod działa, ale stanie się zobowiązaniem w przypadku dużych plików. czego mi brakuje?
Idealnie chciałabym móc zrobić replaceCharactersInRange: Withdata:
To jest dobre rozwiązanie. Sugerowałbym aktualizację sygnatury metody: - (void) removeCharacters: (unsigned long long) numberOfCharacters fromBeginningOfFile: (NSFileHandle *) fileHandle { – LMVogel