无法将目录从 Bundle 复制到库

Posted

技术标签:

【中文标题】无法将目录从 Bundle 复制到库【英文标题】:Can't Copy a directory from Bundle to Library 【发布时间】:2014-02-06 11:24:33 【问题描述】:

我在这里遇到了一些令人沮丧的问题,问题是我想将一个目录从 Bundle 复制到我的应用程序的库路径中,但代码不能这样做。目录树显示在这里:

在我复制目录之前,我想检查捆绑中的目录内容,但数组返回 0 项。我使用的代码是这样的:

NSString * templatesBundlePath = [[NSBundle mainBundle] pathForResource:@"Templates" ofType:nil];
NSArray * packFolders = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:[NSURL fileURLWithPath:templatesBundlePath] includingPropertiesForKeys:[NSArray arrayWithObjects:NSURLIsDirectoryKey, nil] options:0 error:&error];

包文件夹包含 0 个项目。

如果包含不是 0,我尝试使用以下代码复制它:

NSString * templatesAppPath = NSApplicationSupportDirectoryPath(@"Templates");
[[NSFileManager defaultManager] copyItemAtPath:templatesBundlePath toPath:templatesAppPath error:&error];

当我尝试使用此代码检查捆绑目录大小时

NSFileManager *fm = [[NSFileManager alloc] init];

resultSize = [[[fm attributesOfItemAtPath:[[NSURL fileURLWithPath:templatesBundlePath]  path] error:nil] objectForKey:NSFileSize] unsignedIntegerValue];

NSLog(@"Size: %lu", (unsigned long)resultSize);

值只显示68,但finder中的实际大小是200MB

有没有人和我一样的问题?有人可以帮我吗?

谢谢

【问题讨论】:

【参考方案1】:

项目文件夹是黄色的,这意味着它们是组而不是文件夹。将资源与应用程序捆绑在一起时,目录结构将被删除,所有文件都放在捆绑包的根目录中。

只需从您的项目中删除所有组并将文件夹拖回您的项目中,现在选择创建文件夹而不是组。

【讨论】:

嗨@rckoenes,谢谢你的回答,我是否也必须单击将项目复制到目标组的文件夹中? 仅当您拖入项目的目录位于项目目录之外时。【参考方案2】:

请尝试这个获取 black.jpg 图片路径:

NSString *strpath=[NSString stringWithFormat:@"%@",[[NSBundle mainBundle]pathForResource:@"Templates" ofType:@""]]; strpath=[strpath stringByAppendingString:@"/"]; strpath=[strpath stringByAppendingString:@"80s"]; strpath=[strpath stringByAppendingString:@"/"]; strpath=[strpath stringByAppendingString:@"80s_a-team"]; strpath=[strpath stringByAppendingString:@"/"]; strpath=[strpath stringByAppendingString:@"black"]; strpath =[strpath stringByAppendingString:@".jpg"];

【讨论】:

【参考方案3】:

试试下面的代码

  NSArray *libraryPath=NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
        NSString *directoryPath = [libraryPath objectAtIndex:0];
         NSString *imagePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Templete"];

                // Copy the image Folder from the package to the users filesystem
                [fileManager copyItemAtPath:imagePathFromApp toPath:directoryPath error:nil];

【讨论】:

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

使用 NSSavePanel 将文件从 Bundle 保存/复制到桌面

将领域从 Bundle 复制到 Documents,然后将其读入本地常量,在 Swift 2.0 中

子目录中的资源文件被复制到 app bundle 的根目录

无法将文件从包复制到 Documents 目录,为啥 fileExistsAtPath 返回错误?

无法将 sqlite 文件从应用程序包复制到文档目录:获取(Cocoa 错误 260)

将文件夹从 Android 应用程序复制到本地 Windows 目录