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 文件。

有人知道我在做什么错吗?

非常感谢!

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 回答