2012-03-20 67 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