我正在尝试将下载的文件复制到应用程序文档目录中的特定文件夹,但似乎无法使其正常工作。我正在使用的代码是:
NSString *itemPathString = @"http://pathToFolder/folder/myFile.doc";
NSURL *myUrl = [NSURL URLWithString:itemPathString];
NSArray *paths = [fm URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
NSURL *folderPath = [[paths objectAtIndex:0] URLByAppendingPathComponent:@"folder"];
NSURL *itemURL = [documentsPath URLByAppendingPathComponent:@"myFile.doc"];
// copy to documents directory asynchronously
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSFileManager *theFM = [[NSFileManager alloc] init];
NSError *error;
[theFM copyItemAtURL:myUrl toURL:itemURL error:&error];
}
});
我可以检索文件,但无法复制。任何人都可以告诉我上述代码是否有任何问题?
答案 0 :(得分:3)
如果从服务器下载文件,如果它是一个相当小的文件(例如以kb而不是mb测量),则可以使用dataWithContentsOfURL
。您可以使用该方法将文件加载到内存中,然后使用NSData
实例方法writeToFile
保存文件。
但是,如果它是一个更大的文件,您将需要使用NSURLConnection
,它不会尝试将整个文件保存在内存中,而是在适当时将其写入文件系统。但是,这里的诀窍是,如果您要下载多个文件,您必须按顺序下载它们,或者封装NSURLConnection
和NSOutputStream
,这样您就可以同时为每个文件分别复制这些文件。下载。
我上传了一个项目Download Manager,该项目展示了NSURLConnection
实现的样子,但这并不重要。您可能更愿意考虑使用已建立的第三方库,例如ASIHTTPRequest或RestKit。
答案 1 :(得分:3)
如果要访问具有给定名称的文件夹,则应检查其是否存在,如果不存在则创建它。这可以很容易地完成:
NSString *folder = [documentsPath stringByAppendingPathComponent:folderName];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error = nil;
if (![fileManager fileExistsAtPath:folder]) {
[fileManager createDirectoryAtPath:folder withIntermediateDirectories:YES attributes:nil error:&error];
}
if (error != nil) {
NSLog(@"Some error: %@", error);
return;
}
修改强>
如果你想检查你的设备上是否正确创建了文件夹,请到组织者 - >设备 - > [YourDevelopingDeviceWhereTheAppWasInstalled] - >应用程序 - > [YourApplication]
在下半部分,您至少应该看到一些像Documents这样的文件夹。如果你创建的文件夹也成功了。
答案 2 :(得分:1)
您需要在复制文件之前创建任何中间目录。检查Simulator文件夹,看看在应用程序Documents-folder中创建了“folder”目录。
模拟器的路径是/ Users / $ username / Library / Application Support / iPhone Simulator /