无法将目录从 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 中
无法将文件从包复制到 Documents 目录,为啥 fileExistsAtPath 返回错误?