NSFileManager contentsOfDirectoryPath 返回空

Posted

技术标签:

【中文标题】NSFileManager contentsOfDirectoryPath 返回空【英文标题】:NSFileManager contentsOfDirectoryPath returning empty 【发布时间】:2012-02-02 12:02:04 【问题描述】:

我的 xCode 项目中有一个图像组。我正在尝试将该文件夹中的所有文件放入我的应用程序中。

 NSFileManager *fm = [NSFileManager defaultManager];
    NSArray *dirContents = [fm contentsOfDirectoryAtPath:@"/Images/" error:nil];

上面的代码总是返回一个空数组。我通过右键单击然后“新建组”在 xCode 4.2 中添加了组。

【问题讨论】:

我知道,但 xCode 不允许您添加文件夹。如何添加文件夹而不是逻辑组。 【参考方案1】:

您使用的路径可能不正确。 /Images/ 将引用沙箱根目录中的图像。如果您文件夹中的图片作为资源添加到您的项目中,它们将存储在您应用的 Resources 目录中,甚至可能不在Images 目录中。

您还想阅读错误以了解问题所在。这就是它的用途:

NSErorr *error = nil;
NSArray *dirContents = [fm contentsOfDirectoryAtPath:@"/Images/" error:&error];
if (!dirContents) 
    // inspect error
 

使用@987654321@ 获取应用程序资源目录的路径。

了解您的项目结构不等于您的资源最终将在您的应用程序中的位置。使用您的目标将资源全部复制到 Resources 目录 Copy Bundle Resources 构建阶段。

如果您确实想在资源目录的不同目录中添加某些文件,请添加一个新的Copy Files 阶段,目标为ResourcesSubpath 以您的文件夹命名,例如Images

然后你可以使用你的文件管理器和你使用的路径遍历这些图像:

[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Images"];

【讨论】:

是的,图像文件夹位于 Resources 目录中。我怎么知道它是一个目录还是一个组,因为所有东西都是黄色的。在以前的 xCode 版本中,组被着色为蓝色文件夹。 了解您的项目导航器中的布局并不是您的图像最终会出现在您的应用程序中的方式。目标中的 Copy Bundle Resources 阶段会将所有图像文件复制到应用程序中的 Resources 目录,而不考虑项目导航器中的组或目录。请参阅我的更新答案。 感谢详细的解释!

以上是关于NSFileManager contentsOfDirectoryPath 返回空的主要内容,如果未能解决你的问题,请参考以下文章

NSFilemanager 的使用

NSFileManager

NSFileManager的应用

教程 使用 NSFileManager 存储数据?

NSFileManager和NSFileHandle

NSFileManager - 创建一个只读文件