0

我有一个包含一系列文本文件的组/文件夹。我需要为每个人找到一条路径,以便我可以阅读内容,但我似乎无法得到任何工作。

我已经搞砸了,它只[NSBundle pathsForResourcesOfType:@"txt" inDirectory:@"directoryName"]给了我空值或读取“内容”的单个字符串,[[NSFileManager defaultManager] enumeratorAtPath:@"directoryName"]我不知道一旦它被创建后该怎么处理,并且[[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"directoryName" error:nil].

我不知道我做错了什么,在这一点上我只是抓住了稻草。我在这里浏览了 20 或 30 页,但都没有真正的帮助。

我应该注意这是一个 Cocoa 应用程序,而不是 iOS。

4

4 回答 4

3

如果您想读取任意目录中的文件,路径枚举器可以很好地工作。有点过时,但这也有它的魅力。

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

这将为您提供您的 Documents 目录,当与上面的代码片段一起使用时,列出该文件夹和子文件夹中的所有文件。

请注意,我们实际上不应该再使用我们漂亮的旧 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中阅读。

于 2013-06-18T13:06:48.167 回答
0

问题是在添加文件夹时,我还需要创建对该文件夹的引用。Xcode 不默认使用此选项。我最初选择简单地创建组,但这不起作用。确保您的对话框在拖放文件夹时看起来像这样

于 2013-06-18T12:32:50.017 回答
0

如果您的小组在您当前的项目中,您可以使用:

NSString *path = [[NSBundle mainBundle] pathForResourcesOfType:@"txt" inDirectory:@"directoryName"]

这应该对您有用,我注意到您尝试了类似的方法,但请确保您使用的是 mainBundle。

于 2013-06-17T22:54:08.790 回答
0

让我们只取 3 个中的 1 个:

[[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"directoryName" error:nil]
  1. 您应该包含错误参数并检查它包含的内容
  2. 您需要提供完整路径,而不仅仅是“目录名”
  3. 结果,您将获得一个包含目录中文件的文件名的数组

所以如果你想要完整的路径,你可以这样做:

NSString *directoryPath = ...;
NSArray *fileNames = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directoryPath error:...];

for(NSString *fileName in fileNames) {
    NSLog(@"%@", [directoryPath stringByAppendingPathComponent:fileName]);
}
于 2013-06-17T22:49:04.810 回答