0

.mファイルを文字列に変換しようとしています。フォルダ内のファイルを検索し、その各コンテンツを文字列として使用します。これは私が使用しているコードです:

- (IBAction)searchAction:(id)sender {

    NSFileManager *fm = [NSFileManager defaultManager];
    NSArray *dirContents = [fm contentsOfDirectoryAtPath:folderLabel.stringValue error:nil];
    NSPredicate *fltr = [NSPredicate predicateWithFormat:@"self ENDSWITH '.m'"];
    NSArray *onlyMs = [dirContents filteredArrayUsingPredicate:fltr];

    for (int i=0; i<[onlyMs count]; i++) {

        NSString* text = [[NSString alloc] initWithContentsOfFile:[onlyMs objectAtIndex:i]
                                            encoding:NSUTF8StringEncoding
                                            error:nil];
        NSLog(@"string: %@", text);

    }        
}

2013-02-13 02:38:05.700 LocalizedStringSearch[19001:303] string: (null)

ここを除いて、すべての.mファイルが正しく検出されても、返されるすべてのログはnullです。

誰かが私が間違っていることを知っていますか?

どうもありがとう!

4

1 に答える 1

0
  1. contentsOfDirectoryAtPath:フルパス名ではなく、ファイル名の配列のみが表示されると思います。そのため、ファイルを開く前にパスを先頭に追加する必要があります。編集:私はそれを混乱させるかもしれないと思いますenumeratorAtPath:...もしそうなら、元のフォルダ名にそれらを追加するのではなく、あなたが持っているファイル名を使い続けてください。

  2. 次に例を示します(テストされていません)。

    NSString *fullPath = [folderLabel.stringValue stringByAppendingPathComponent:[onlyMs objectAtIndex:i];
    NSError *error = nil;
    NSString *text = [[NSString alloc] initWithContentsofFile:fullPath
                                                     encoding:NSUTF8StringEncoding
                                                        error:&error];
    
    if (text == nil)
        NSLog(@"%@", error);
    else
        NSLog(@"%@", text);
    
  3. 上記は、ファイルが実際にUTF-8を使用してエンコードされている場合にのみ機能します。エンコーディングがわからない場合は、フレームワークに次の方法で試してもらい、理解させることができます。

    NSString *fullPath = [folderLabel.stringValue stringByAppendingPathComponent:[onlyMs objectAtIndex:i];
    NSError *error = nil;
    NSStringEncoding enc;
    NSString *text = [[NSString alloc] initWithContentsofFile:fullPath
                                                 usedEncoding:&enc
                                                        error:&error];
    
    if (text == nil)
        NSLog(@"%@", error);
    else
        NSLog(@"%@", text);
    
于 2013-02-13T02:05:35.577 に答える