如何将项目文件复制到应用程序的文档文件夹?

时间:2012-10-03 16:57:16

标签: objective-c

我想使用NSFileManager创建一个在MyApp.app/Document文件夹中有文件的文件夹。 (MyApp是我的自定义应用。)

所以,我将IMG_0525.jpg(用于测试)复制到项目的文件夹中。

然后尝试将其从项目文件夹复制到MyApp.app/Document文件夹。

但我不知道如何指定路径名。 (来源和目的地路径)

你能告诉我怎么做吗?

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    [self generateTableContents];

}


- (void)generateTableContents {

    NSFileManager * fileManager = [NSFileManager defaultManager];
    NSArray *appsDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentPath = [appsDirectory objectAtIndex:0];
    NSLog(@"documentPath : %@", documentPath);

    [fileManager changeCurrentDirectoryPath:documentPath];
    [fileManager createDirectoryAtPath:@"user_List1" withIntermediateDirectories:YES attributes:nil error:nil];

    // I'm trying to copy IMG_0525.jpg to MyApp.app/Document/user_List1 folder.
    [fileManager copyItemAtPath:<#(NSString *)srcPath#> toPath:<#(NSString *)dstPath#> error:<#(NSError * *)error#>];


}

enter image description here

1 个答案:

答案 0 :(得分:1)

  • 使用NSSearchPathForDirectoriesInDomains获取此文档目录的代码是正确的,但请注意,这不会指向“MyApp.app/Documents”。实际上,您无法在运行时修改应用程序的包内容(顺便说一下,如果修改它会违反包的代码签名),但您可以在应用程序的沙箱中复制文件(在“MyApp.app”之外) “捆绑”,这是此应用程序的沙箱文档文件夹的路径,您对NSSearchPathForDirectoriesInDomains的调用将返回

  • 话虽如此,您现在拥有了文件的目标文件夹,因此这是toPath:方法的-copyItemAtPath:toPath:error:参数。唯一缺少的部分是指向包中资源的源路径(指向在Xcode项目中编译后在Xcode项目中添加的图像文件)。

要获取此源路径,请使用-[NSBundle pathForResource:ofType:]方法。这很简单:

NSString* sourcePath = [[NSBundle mainBundle] pathForResource:@"IMG_0525" ofType:"jpg"];
  • 如果要在error:方法失败的情况下检索错误,则最后NULL参数可以是NSError*,或指向-copyItemAtPath:toPath:error:对象的指针。对于该参数,只需在通话前创建NSError* error;变量,然后将&error传递给-copyItemAtPath:toPath:error:的第三个参数。

所以完整的调用将如下所示:

NSError* error; // to hold the error details if things go wrong
NSString* sourcePath = [[NSBundle mainBundle] pathForResource:@"IMG_0525" ofType:"jpg"];

BOOL ok = [fileManager copyItemAtPath:sourcePath toPath: documentPath error:&error];
if (ok) {
  NSLog(@"Copy complete!");
} else {
  NSLog(@"Error while trying to copy image to the application's sandbox: %@", error);
}