2013-02-13 64 views
0

我想將.m文件轉換爲字符串。我將搜索文件夾中的文件,然後將其每個內容用作字符串。這是我使用的代碼:.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文件。

任何人都知道我在做什麼錯了?

非常感謝!

+1

您正在爲您的錯誤論點提供'nil',而不是一個指針傳遞給' NSError *'對象,並找出是否有什麼東西。 – dreamlax 2013-02-13 02:02:02

+0

NSLog是你的朋友。用它。 – 2013-02-13 02:11:06

回答

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);