2012-03-20 50 views
0

我想讀取一個文件(hello.in)並將它逐行寫入另一個文件。 我寫下面的方法,當我運行它時,我得到sigabrt錯誤。 我很想得到答案。WriteData導致sigabrt錯誤

-(void) saveAsLineLine: (NSString*) fileName 
{ 
    NSString *filePath; 
    filePath = [NSString stringWithFormat:@"%@%@", pathdir, @"hello.in"]; 

    // reading the file 
    NSString *entireFileInString = [NSString stringWithContentsOfFile:filePath encoding:(NSUTF8StringEncoding) error:nil]; 
    // each line, adjust character for line endings 
    NSArray *lines = [entireFileInString componentsSeparatedByString:@"\n"]; 

    filePath = [NSString stringWithFormat:@"%@%@", pathdir, fileName]; 
    // create a file 
    [[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil]; 
    // open the file for writeing 
    NSFileHandle *fh = [NSFileHandle fileHandleForWritingAtPath:filePath]; 

    // write line by line 
    for (NSData *line in lines) 
    { 
     NSLog (@"line: %@\n", line); 
     [fh seekToEndOfFile]; 
     [fh writeData: line];      // THE BUG IS HERE !!!!!!!! 

//  @try { 
//   [fh writeData: line]; 
//    
//  } 
//  @catch (NSException *exception) { 
//   NSLog(@"%@",[exception description]); 
//  } 

    } 

    [fh closeFile]; 

} 
+0

使用'-stringByAppendingPAthComponent:'創建文件路徑。它比僅將目錄和文件連接在一起更強大。一方面,如果目錄缺少最後的'/' – JeremyP 2012-03-20 16:05:45

回答

1

NSArraylines持有NSString,不NSData情況下,對吧?

如果你想將數據寫入到文件...

[lines enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    NSData *lineData = [obj dataUsingEncoding:NSUTF8StringEncoding]; 
    [fh seekToEndOfFile]; 
    [fh writeData:lineData]; 
}]; 
+0

謝謝!!優秀的答案! – AsfK 2012-03-20 18:28:00

+0

當然! - 如果你接受它,那麼它會從未應答的隊列中取出。 – FluffulousChimp 2012-03-20 18:53:33