我有一个包含一系列文本文件的组/文件夹。我需要为每个人找到一条路径,以便我可以阅读内容,但我似乎无法让任何东西发挥作用。
我已经搞砸了
[NSBundle pathsForResourcesOfType:@"txt" inDirectory:@"directoryName"]
,它只给了我空值或一个读取“Contents”的单个字符串,[[NSFileManager defaultManager] enumeratorAtPath:@"directoryName"]
,一旦创建,我不知道该怎么办,还有[[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"directoryName" error:nil]
。
我不知道自己做错了什么,此时我只是抓住救命稻草。我在这里浏览了 20 或 30 页,但没有一个真正有帮助。
我应该注意,这是一个 Cocoa 应用程序,而不是 iOS。
如果您想读取任意目录中的文件,路径枚举器可以很好地工作。虽然有点老套,但也有它的魅力。
NSString *docPath = @"/tmp";
NSDirectoryEnumerator *dirEnum = [[NSFileManager defaultManager] enumeratorAtPath:docPath];
NSString *filename;
while (filename = [dirEnum nextObject]) {
//Do something with the file name
}
如果您想从主目录中众所周知且定义的目录中读取内容,那么您可以使用
NSSearchPathForDirectoriesInDomains
:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docPath = [paths objectAtIndex: 0];
这将为您提供文档目录,当与上面的代码片段一起使用时,列出该文件夹和子文件夹中的所有文件。
请注意,我们实际上不应该再使用漂亮的旧 Unix 路径,而是引用 URL。
在这种情况下,你会得到类似的信息:
NSArray *URLs = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
NSURL *docURL = URLs[0];
NSDirectoryEnumerator *URLEnum = [[NSFileManager defaultManager] enumeratorAtURL: docURL includingPropertiesForKeys: nil options: 0 errorHandler: nil];
NSString *filename;
while ((filename = [URLEnum nextObject])) {
// ...
}
请注意,
enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:
具有各种有用的参数,您可以在docs中阅读这些参数。
我们只取 3 个中的 1 个:
[[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"directoryName" error:nil]
所以如果你想要完整的路径,你可以这样做:
NSString *directoryPath = ...;
NSArray *fileNames = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directoryPath error:...];
for(NSString *fileName in fileNames) {
NSLog(@"%@", [directoryPath stringByAppendingPathComponent:fileName]);
}
问题是添加文件夹时,我还需要创建对该文件夹的引用。 Xcode 不默认使用此选项。我最初选择简单地创建组,但这并不能完成任务。
如果您的小组在当前项目中,您可以使用:
NSString *path = [[NSBundle mainBundle] pathForResourcesOfType:@"txt" inDirectory:@"directoryName"]
这应该对你有用,我注意到你尝试过类似的东西,但请确保你使用的是 mainBundle。