我编写了一些代码来将文件(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");
}
答案 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])
最好将文件移到文件夹中。