iOS 将文件从主包复制到文档目录

Posted

技术标签:

【中文标题】iOS 将文件从主包复制到文档目录【英文标题】:iOS copy files from main bundle to documents directory 【发布时间】:2012-02-10 15:25:49 【问题描述】:

我正在尝试将添加到名为“includes”的文件夹中的文件复制到名为“includes”的文档目录上的文件夹中。

resContents 的值为零。为什么?

- (void)copyResources

    NSString *sourcePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"includes"];
    NSString *destPath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"includes"];

    NSArray* resContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:sourcePath error:NULL];

    for (NSString* obj in resContents)
        NSError* error;
        if (![[NSFileManager defaultManager] copyItemAtPath:[sourcePath stringByAppendingPathComponent:obj] toPath:[destPath stringByAppendingPathComponent:obj] error:&error]) 
            NSLog(@"Error: %@", error);;
        
    

【问题讨论】:

【参考方案1】:

您的 Xcode 项目应将您的 includes 文件夹添加为 文件夹参考 而不是

组只是为了使事情井井有条,而不是提供文件夹结构,因此在复制到设备时,所有文件最终都处于同一级别。

【讨论】:

【参考方案2】:

查看已编译的应用程序包。

通常,Xcode 生成的包是扁平的。这意味着尽管您添加的资源文件将被复制到包中,但您创建的任何目录都不会,因此资源路径中没有“包含”目录。因此,您的源内容将为 nil。

所以在你的情况下,尝试使用:

NSString *sourcePath = [[NSBundle mainBundle] resourcePath];

编辑:嗯,显然添加文件夹引用也有效(感谢 Ignacio Inglese)。

【讨论】:

好的,但是会列出所有文件,包括 .nib 和 plists!我只需要从特定文件夹中选择文件。不可能? 它是bundle中的扁平结构。 @Jaume 那么你必须选择你需要的文件(可能通过一个通用的扩展名,或者在你的代码中保留一个文件名列表)。

以上是关于iOS 将文件从主包复制到文档目录的主要内容,如果未能解决你的问题,请参考以下文章

将通配符文件名从主包复制到文档?

从主包复制到应用程序支持 swift

从主包中获取目录的内容

在将文件从捆绑包复制到文档路径时显示进度条[重复]

如何在 iPhone 的文档目录中查找内容

如何将 SQLite 文件从 Documents 目录保存回目标 C 中的主包?