将文件下载到Documents目录

时间:2012-11-13 15:44:21

标签: ios xcode nsdocumentdirectory

我正在尝试将下载的文件复制到应用程序文档目录中的特定文件夹,但似乎无法使其正常工作。我正在使用的代码是:

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];
    }
});

我可以检索文件,但无法复制。任何人都可以告诉我上述代码是否有任何问题?

3 个答案:

答案 0 :(得分:3)

如果从服务器下载文件,如果它是一个相当小的文件(例如以kb而不是mb测量),则可以使用dataWithContentsOfURL。您可以使用该方法将文件加载到内存中,然后使用NSData实例方法writeToFile保存文件。

但是,如果它是一个更大的文件,您将需要使用NSURLConnection,它不会尝试将整个文件保存在内存中,而是在适当时将其写入文件系统。但是,这里的诀窍是,如果您要下载多个文件,您必须按顺序下载它们,或者封装NSURLConnectionNSOutputStream,这样您就可以同时为每个文件分别复制这些文件。下载。

我上传了一个项目Download Manager,该项目展示了NSURLConnection实现的样子,但这并不重要。您可能更愿意考虑使用已建立的第三方库,例如ASIHTTPRequestRestKit

答案 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这样的文件夹。如果你创建的文件夹也成功了。

enter image description here

答案 2 :(得分:1)

您需要在复制文件之前创建任何中间目录。检查Simulator文件夹,看看在应用程序Documents-folder中创建了“folder”目录。

模拟器的路径是/ Users / $ username / Library / Application Support / iPhone Simulator /