2013-02-13 77 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);