0

我想使用 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#>];


}

在此处输入图像描述

4

1 回答 1

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

  • 话虽如此,您现在有了文件的目标文件夹,这就是方法的toPath:参数-copyItemAtPath:toPath:error:。唯一缺少的部分是指向包中资源的源路径(指向您在 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);
}
于 2012-10-03T17:10:13.770 回答