我正在尝试将.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。
任何人都知道我做错了什么?
非常感谢!
答案 0 :(得分:0)
我认为contentsOfDirectoryAtPath:
只提供一个文件名数组,而不是完整路径名,因此您需要在打开文件之前添加路径。编辑:我想我可能会对enumeratorAtPath:
感到困惑...如果是这样,请继续使用您拥有的文件名,而不是将它们附加到原始文件夹名称。
这是一个例子(未经测试):
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);
以上只有在文件实际使用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);