2012-03-20 16 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:' filePathにを作成します。ディレクトリとファイルを連結するよりも堅牢です。 1つは、ディレクトリに最終的な '/'がないかどうかは関係ありません – JeremyP

答えて

1

NSArraylinesは右、NSStringのインスタンスではないNSDataを保持していますか?

あなたがファイルにデータを書き込みたい場合は...

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

ありがとうございました!優れた答え! – AsfK

+0

あなたがそれを受け入れるならば、答えられていないキューから降りてくるでしょう。 – FluffulousChimp

関連する問題