Utilizzando un NSFileHandle, è abbastanza facile da rimuovere numero n di caratteri dalla fine del file usando truncateFileAtOffset.sovrascrivere i dati utilizzando NSFileHandle
-(void)removeCharacters:(int)numberOfCharacters fromEndOfFile:(NSFileHandle*)fileHandle {
unsigned long long fileLength = [fileHandle seekToEndOfFile];
[fileHandle truncateFileAtOffset:fileLength - numberOfCharacters];
}
Tuttavia rimuovendo i caratteri dalla parte anteriore del file non sembra possibile, senza dover copiare tutti i dati rimanenti nella memoria, sovrascrivendo il file e quindi scrivere i dati rimanenti all'interno del file.
-(void)removeCharacters:(int)numberOfCharacters fromBeginningOfFile:(NSFileHandle*)fileHandle {
[fileHandle seekToFileOffset:numberOfCharacters];
NSData *remainingData = [fileHandle readDataToEndOfFile];
[fileHandle truncateFileAtOffset:0];
[fileHandle writeData:remainingData];
}
Questo codice funziona, ma diventerà una responsabilità in file di grandi dimensioni. Cosa mi manca?
Idealmente mi piacerebbe essere in grado di fare replaceCharactersInRange: Withdata:
Questa è una bella soluzione. Suggerirei di aggiornare la firma del metodo in modo che: - (void) removeCharacters: (unsigned long long) numberOfCharacters fromBeginningOfFile: (NSFileHandle *) fileHandle { – LMVogel