2013-04-25 20 views
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) 
+0

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. –

+0

wygląda tak, jakbym używał fileHandleForReadingAtPath zamiast fileHandleForWritingAtPath. – ssk

Odpowiedz

3

musi zmienić outputFileHandle wiersz:

outputFileHandle = [NSFileHandle fileHandleForWritingAtPath: self.outputFilePath]; 
Powiązane problemy