为什么NSFileManager无法正常工作?

时间:2011-08-21 15:29:28

标签: cocoa nsfilemanager

我编写了一些代码来将文件(dbtemplate.sqlite)从应用程序包复制到库中。但是,库中不会显示任何文件,每次启动应用程序时都会记录复制模板的文本。控制台中没有显示错误。我做错了什么?

NSFileManager *fileManager = [NSFileManager defaultManager];

if (![fileManager fileExistsAtPath:@"~/Library/AppSafe/database/db.sqlite"]) {

    [fileManager createDirectoryAtPath:@"~/Library/AppSafe/database" withIntermediateDirectories:YES attributes:nil error:nil];

    [fileManager copyItemAtPath:@"dbtemplate.sqlite" toPath:@"~/Library/AppSafe/database/db.sqlite" error:nil];
    NSLog(@"copied template");

}

3 个答案:

答案 0 :(得分:8)

如果我没记错的话,你必须将完整路径传递给NSFileManager方法,并且使用波浪号前缀路径将不起作用。

因此,不要使用@"~/Library/...",而是使用:

[@"~/Library/..." stringByExpandingTildeInPath]

答案 1 :(得分:1)

我相信你的问题在于copyItemAtPath:,因为你提供的字符串不是正确的路径。使用类似[[NSBundle mainBundle] pathForResourceWithName:]的内容来获取资源的实际路径。另外,我不确定您的路径中的〜是否受支持 - 您可能需要使用NSString的某些功能来扩展它。

答案 2 :(得分:0)

我建议将文件保存在文档文件夹中,我不确定你是否可以将文件保存在库文件夹中。使用此代码在文档文件夹中创建文件的路径:

NSString *path = [documentsDirectory stringByAppendingPathComponent:@"db.sqlite"];

只需检查它是否存在:

if (![fileManager fileExistsAtPath:path])

最好将文件移到文件夹中。