11
Esistono buoni esempi per eseguire la lettura/scrittura di file in blocchi con obiettivo c? Sono nuovo di API obiettivo-c e iPhone, ecco il codice di esempio che ho scritto. Ci sono modi migliori per farlo?Esempio di lettura/scrittura file con NSFileHandle
-(void) performFileOperation
{
@try {
NSFileHandle *inputFileHandle;
NSFileHandle *outputFileHandle;
//check whether the output file exist, if not create a new one.
NSFileManager *morphedFileManager;
outputFileManager = [NSFileManager defaultManager];
if ([outputFileManager fileExistsAtPath: self.outputFilePath ] == NO)
{
NSLog (@"Output file does not exist, creating a new one");
[outputFileManager createFileAtPath: self.outputFilePath
contents: nil
attributes: nil];
}
NSData *inputDataBuffer;
inputFileHandle = [NSFileHandle fileHandleForReadingAtPath: self.inputFilePath];
NSAssert(inputFileHandle != nil, @"Failed to open handle for input file");
outputFileHandle = [NSFileHandle fileHandleForReadingAtPath: self.outputFilePath];
NSAssert(outputFileHandle != nil, @"Failed to open handle for output file");
@try{
// seek to the start of the file
[inputFileHandle seekToFileOffset: 0];
[outputFileHandle seekToFileOffset: 0];
while((inputDataBuffer = [inputFileHandle readDataOfLength: 1024]) != nil)
{
[outputFileHandle writeData: [self.fileWrapper process: inputDataBuffer]];
}
}
@catch (NSException *exception) {
@throw;
}
@finally {
[inputFileHandle closeFile];
[outputFileHandle closeFile];
}
}
@catch (NSException *exception) {
@throw;
}
}
ottengo la seguente eccezione durante il tentativo di scrivere:
Failed to process input buffer (*** -[NSConcreteFileHandle writeData:]: Bad file descriptor)
funziona? A prima vista sembra a posto. Forse potresti aumentare la dimensione del buffer a qualcosa come 65kB o qualsiasi altra cosa. –
sembra che stavo usando fileHandleForReadingAtPath invece di fileHandleForWritingAtPath. – ssk