繁体   English   中英

将文件夹从主包复制到iphone中的文档目录

[英]Copy Folder from main bundle to documents directory in iphone

我有一个应用程序,其中我的主包中有一个名为“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]);

    }

请帮我。

您确定文件夹树中有文件吗?

NSString *defaultDBPath1 = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"/Images/Images1"];

通常当xcode创建一个包时,它会压缩目录内容。 因此,首先检查源文件夹中的所有内容。 即使您看到包浏览器中显示该文件夹,在应用程序中复制时,您将看到图像位于根文件夹中。 为避免这种情况,当您添加Image文件夹时,在xcode项目中,您可以选中“创建文件夹引用”选项。

但是,由于覆盖,您的写入可能会失败。 在这种情况下,您必须为NSFileManager给出的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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM