Iphone NSFileManager-在启动时复制文件
我需要从我的应用程序的资源文件夹中复制一些示例文件,并将它们放在我的应用程序的文档文件夹中。我提出了附加的代码,它编译的很好,但它不工作。我提到的所有目录都存在。我不太清楚我做错了什么,有人能给我指出正确的方向吗Iphone NSFileManager-在启动时复制文件,iphone,cocoa,document,nsfilemanager,copying,Iphone,Cocoa,Document,Nsfilemanager,Copying,我需要从我的应用程序的资源文件夹中复制一些示例文件,并将它们放在我的应用程序的文档文件夹中。我提出了附加的代码,它编译的很好,但它不工作。我提到的所有目录都存在。我不太清楚我做错了什么,有人能给我指出正确的方向吗 NSFileManager*manager = [NSFileManager defaultManager]; NSString*dirToCopyTo = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]
NSFileManager*manager = [NSFileManager defaultManager];
NSString*dirToCopyTo = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSString*path = [[NSBundle mainBundle] resourcePath];
NSString*dirToCopyFrom = [path stringByAppendingPathComponent:@"Samples"];
NSError*error;
NSArray*files = [manager contentsOfDirectoryAtPath:dirToCopyFrom error:nil];
for (NSString *file in files)
{
[manager copyItemAtPath:[dirToCopyFrom stringByAppendingPathComponent:file] toPath:dirToCopyTo error:&error];
if (error)
{
NSLog(@"%@",[error localizedDescription]);
}
}
编辑:我只是按原样编辑了代码。然而,现在还有另一个问题:
2010-05-15 13:31:31.787书面形式
Mobile[4587:207]DAMutableDictionary.h
2010-05-15 13:31:31.795书面形式
移动[4587:207]文件管理器
错误:无法执行操作
完整的。文件存在
编辑:我已通过告诉NSFileManager复制文件的目的地名称修复了该问题
[manager copyItemAtPath:[dirToCopyFrom stringByAppendingPathComponent:file] toPath:[dirToCopyTo stringByAppendingPathComponent:file] error:&error];
我认为问题出在这方面:
NSArray*files = [manager contentsOfDirectoryAtPath:dirToCopyTo error:nil];
您正在目标目录而不是源目录中列出文件。将其更改为:
NSArray*files = [manager contentsOfDirectoryAtPath:dirToCopyFrom error:nil];
你应该没事。我想问题是你正在从dirToCopyTo读取要复制的文件,我想你是指dirToCopyFrom 还要获取您应该使用的文档目录 目标路径是您希望副本具有的路径,包括其文件名。您不能将路径传递给希望NSFileManager填写源文件名的目录;它不会这样做 表示目标路径不能描述任何存在的内容: …操作之前,dstPath不得存在 在您的情况下,它是目标目录的路径,因此它确实存在,这就是复制失败的原因
您需要将所需的文件名附加到目标文件,使其成为目标文件的路径。然后它将不存在(如果以前没有复制),因此复制将成功。请注意,启动时必须避免长时间的操作:
- 禁用UI元素
- 启动异步/线程操作
- 在复制的完成回调中(通过通知、协议…或其他方式) 通知UI界面它可以开始提取数据
使用ZIP文件复制效率更高,因为:
解压Zip文件应该更有效,因为这些调用是用纯C编写的,而不是用Cocoa编写的,会带来所有的开销 谢谢!这确实是问题所在。现在我找到了另一个,这是我的日志输出:2010-05-15 13:31:31.787 WriteIt Mobile[4587:207]DAMutableDictionary.h 2010-05-15 13:31:31.795 WriteIt Mobile[4587:207]FileManager错误:操作无法完成。文件存在2010-05-15 13:31:31.795 WriteIt Mobile[4587:207]DAMutableDictionary.m 2010-05-15 13:31:31.802 WriteIt Mobile[4587:207]文件管理器错误:无法完成操作。文件存在等。。。等这到底是什么意思?好像你在试图覆盖一个文件。复制前-确保它不存在。但文档目录为空?这就是为什么我感到惊讶?即使重置了iPhone模拟器,它仍然显示相同的结果。这并不重要,因为两者都返回相同的结果;)在非英语版本的OSX中,目录是否总是文档?是的,marc,我的iPhone设置为德语,所有文档目录仍然称为“文档”。Mark:iPhone上不存在这种方法。iPhone应用程序中唯一的方法(除了从整个布料中伪造路径外)是
NSSearchPathForDirectoriesInDomains
函数:不抑制错误返回(contentsoDirectoryAtPath:error:
)。另外,对于copyItemAtPath:toPath:error:
,在尝试使用error对象之前测试方法是否失败;好的,谢谢。这个问题已经解决了一年多了。我自己也知道;)好的,大卫,我错过了约会!希望能对其他新手有所帮助
[manager copyItemAtPath:[dirToCopyFrom stringByAppendingPathComponent:file] toPath:dirToCopyTo error:&error];