我想使用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#>];
}
答案 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);
}