Cocoa目录内容

问题描述 投票:0回答:4

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

我已经搞砸了

[NSBundle pathsForResourcesOfType:@"txt" inDirectory:@"directoryName"]
,它只给了我空值或一个读取“Contents”的单个字符串,
[[NSFileManager defaultManager] enumeratorAtPath:@"directoryName"]
,一旦创建,我不知道该怎么办,还有
[[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"directoryName" error:nil]

我不知道自己做错了什么,此时我只是抓住救命稻草。我在这里浏览了 20 或 30 页,但没有一个真正有帮助。

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

objective-c cocoa
4个回答
5
投票

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

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中阅读这些参数。


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

0
投票

问题是添加文件夹时,我还需要创建对该文件夹的引用。 Xcode 不默认使用此选项。我最初选择简单地创建组,但这并不能完成任务。 Make sure your dialog box looks like this when you drag and drop folders


0
投票

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

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

这应该对你有用,我注意到你尝试过类似的东西,但请确保你使用的是 mainBundle。

© www.soinside.com 2019 - 2024. All rights reserved.