【问题标题】:ObjC download file and save it to directoryObjC 下载文件并保存到目录
【发布时间】:2012-01-10 20:45:40
【问题描述】:

我想从服务器“更新”本地文件(将其保存到目录中)。 我什么都试过了!没有任何效果!这是我最后一次尝试:

    NSURL *url = [NSURL URLWithString:@"http://www.doothie.com/QAFrameworks/QAUpdater.php"];
    NSData *urlData = [NSData dataWithContentsOfURL:url];


    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"general.qa"];

    NSString *str = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];

    [str writeToFile:filePath atomically:TRUE encoding:NSUTF8StringEncoding error:NULL];

【问题讨论】:

  • 有什么问题?文件没有出现吗?您是否收到错误消息?
  • 文件没有出现...实际上文件已经存在。我只想覆盖文件
  • 文件位于“Ressources/QStandards”目录中。
  • 一些观察结果:1) “Ressources/QStandards”看起来像一个本地化名称 - filePath 不会被本地化。 2) 它是一个相对路径名,我认为NSSearchPathForDirectoriesInDomains 不会返回。 3) 你是否尝试过传入一个真实的错误对象来查看是否收到任何错误消息?
  • 确定不应该是“资源”?

标签: objective-c filesystems nsurl writetofile


【解决方案1】:

不确定您是否正在尝试这样做,但您不应尝试下载和替换应用程序包中的文件。而是将文件下载到用户的~/Library/Application Support/<yourApplicationName>/<yourFiles>。在您的应用程序包中使用该文件之前,请检查具有更多当前数据的文件是否在应用程序支持中。如果您的应用程序是为所有用户安装的(在/Applications/ 内),非管理员用户将无权更改应用程序包中的文件。 (永远不要假设每个用户都以管理员权限运行。)

也许这就是正在发生的事情。

此外,您正在将所有内容加载到 NSString 中。该文件是否实际上包含文本?!如果没有,您可能想改用 NSData :

[[NSData dataWithContentsOfURL:url] writeToFile:filePath atomically:TRUE];

【讨论】:

    猜你喜欢
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多