将文件夹从主包复制到 iphone 中的文档目录
Posted
技术标签:
【中文标题】将文件夹从主包复制到 iphone 中的文档目录【英文标题】:Copy Folder from main bundle to documents directory in iphone 【发布时间】:2013-07-16 06:57:18 【问题描述】:我有一个应用程序,其中我的主包中有一个名为“Images”的文件夹。
在此文件夹中还有另一个名为“Images1”的文件夹,其中包含一些图像。
当我的应用启动时,我想要文档目录中的文件夹“Images”。
我想从文件夹“Images1”中获取图像。
但是我无法使用以下代码在文档目录的“Images”文件夹中获取我的图像。
已编辑
BOOL success1;
NSFileManager *fileManager1 = [NSFileManager defaultManager];
NSError *error1;
NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory1 = [paths1 objectAtIndex:0];
NSString *writableDBPath1 = [documentsDirectory1 stringByAppendingPathComponent:@"Images/Images1"];
success1 = [fileManager fileExistsAtPath:writableDBPath1];
if (success1) return;
// The writable database does not exist, so copy the default to the appropriate location.
NSString *defaultDBPath1 = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Images/Images1"];
NSLog(@"Default : %@",defaultDBPath1);
success1 = [fileManager1 copyItemAtPath:defaultDBPath1 toPath:writableDBPath1 error:&error1];
if (!success1)
NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error1 localizedDescription]);
请帮帮我。
【问题讨论】:
附带说明:为应用商店拒绝做好准备,因为您很可能违反了data storage guidelines。您不应该保存可以在文档目录中轻松重新创建的数据。 【参考方案1】:您确定文件夹树中有文件吗?
NSString *defaultDBPath1 = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"/Images/Images1"];
通常当 xcode 制作一个包时,它会展平目录内容。所以首先检查你的源文件夹中的所有东西。即使您看到该文件夹显示在您的包资源管理器中,当在应用程序中复制时,您也会看到图像位于根文件夹中。为避免这种情况,当您在 xcode 项目中添加 Image 文件夹时,您可以选中“创建文件夹引用”选项。
但是,您的写入可能会因为覆盖而失败。在这种情况下,您必须为下面给出的NSFileManager
实现一个委托方法。
- (void) copyFolder
BOOL success1;
NSFileManager *fileManager1 = [NSFileManager defaultManager];
fileManager1.delegate = self;
NSError *error1;
NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory1 = [paths1 objectAtIndex:0];
NSString *writableDBPath1 = [documentsDirectory1 stringByAppendingPathComponent:@"/Images"];
success1 = [fileManager1 fileExistsAtPath:writableDBPath1];
if (success1 )
NSString *defaultDBPath1 = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Images"];
NSLog(@"default path %@",defaultDBPath1);
success1 = [fileManager1 copyItemAtPath:defaultDBPath1 toPath:writableDBPath1 error:&error1];
else
if (![[NSFileManager defaultManager] fileExistsAtPath:writableDBPath1])
[[NSFileManager defaultManager] createDirectoryAtPath:writableDBPath1 withIntermediateDirectories:NO attributes:nil error:&error1];
- (BOOL)fileManager:(NSFileManager *)fileManager shouldProceedAfterError:(NSError *)error copyingItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath
if ([error code] == 516) //error code for: The operation couldn’t be completed. File exists
return YES;
else
return NO;
【讨论】:
是的,我有。我不明白这段代码有什么问题。如果你知道,请帮忙。 我认为这是关键:createDirectoryAtPath:。该目录在您的 docs 文件夹中不存在,ios 文件管理器不会自动为您创建目录。您需要显式创建它们。以上是关于将文件夹从主包复制到 iphone 中的文档目录的主要内容,如果未能解决你的问题,请参考以下文章