11
Czy istnieją dobre przykłady wykonywania plików do odczytu/zapisu w porcjach z obiektywnym c? Jestem nowicjuszem w zakresie obiektywów c i iPhone API, oto przykładowy kod, który napisałem. Czy istnieją lepsze sposoby na zrobienie tego?Przykład odczytu/zapisu pliku za pomocą 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;
}
}
otrzymuję następujący wyjątek podczas próby zapisu:
Failed to process input buffer (*** -[NSConcreteFileHandle writeData:]: Bad file descriptor)
to działa? Na pierwszy rzut oka wydaje się to w porządku. Może mógłbyś zwiększyć rozmiar bufora do czegoś takiego jak 65kB lub cokolwiek innego. –
wygląda tak, jakbym używał fileHandleForReadingAtPath zamiast fileHandleForWritingAtPath. – ssk