使用setDownloadDestinationPath将文件保存到应用程序文件夹中

时间:2012-07-22 18:05:45

标签: iphone objective-c file save ios-simulator

我有以下代码:

-(IBAction)downloadButton:(id)sender{

    NSURL *url=[NSURL URLWithString:@"http://93.185.34.100/prob/pic1.zip"];
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

    [request setDownloadProgressDelegate:progressView];

//    NSString *pathString=[NSString stringWithFormat:@"%@/theZip.zip", [[NSBundle mainBundle] resourcePath]];
    NSString *filePath = [[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"theZip"] stringByAppendingPathExtension:@"zip"];
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSLog(@"Directory Contents:\n%@", [fileManager contentsOfDirectoryAtPath:[[NSBundle mainBundle] resourcePath] error:nil ]);
    [request setDownloadDestinationPath:filePath];
    NSLog(@"Value: %f", [progressView progress]*100);
    [request startAsynchronous];


}

应将下载的zip文件下载并存储到文档目录中。当我在模拟器上运行它但在设备上不起作用时它会这样做。

有什么问题?

1 个答案:

答案 0 :(得分:2)

您拥有的代码是获取bundle目录的路径。这些是您在应用中包含的资源。这些资源可以读取,但是一旦安装了应用,您就无法编写更改这些资源。从本质上讲,它是您应用的只读目录。

如果您想保存文件,则应将其复制(或保存)到应用的文档缓存应用支持夹。您可以使用

获取Documents and Caches文件夹的路径
NSArray* documentsPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDir = (NSString*)[documentsPaths objectAtIndex:0];

NSArray* cachesPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString* cachesDir = (NSString*)[cachesPaths objectAtIndex:0];

Here is an Apple reference关于在iOS应用中保存文件(搜索确定保存应用专用文件的位置的页面)。这将提供有关哪种目录最适用于此类数据的一些信息。

重要的是你使用其中一个文件夹,而不是只读包文件夹。