Swift将下载的文件放入文件夹[重复]

Posted

技术标签:

【中文标题】Swift将下载的文件放入文件夹[重复]【英文标题】:Swift put dowloaded file into folder [duplicate] 【发布时间】:2016-09-27 14:16:28 【问题描述】:

我想下载一个文件并将其放入已知路径。我搜索了,但我不明白我该怎么做。

这是下载的代码:

func downloadFile(timeout: NSTimeInterval, completionHandler:(megabytesPerSecond: Double?, error: NSError?) -> ()) 
        let url = NSURL(string: "http://insert.your.site.here/yourfile")!

        startTime = CFAbsoluteTimeGetCurrent()
        stopTime = startTime
        bytesReceived = 0
        speedTestCompletionHandler = completionHandler

        let configuration = NSURLSessionConfiguration.ephemeralSessionConfiguration()
        configuration.timeoutIntervalForResource = timeout
        let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)
        session.dataTaskWithURL(url).resume()
    

    func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) 
        bytesReceived! += data.length
        stopTime = CFAbsoluteTimeGetCurrent()
    

如何将接收到的数据放入文件夹?

注意:我使用NSURLSESSIONNSURLSessionDataTask

【问题讨论】:

【参考方案1】:

我过去实现这一点的方式是维护一个 dataTasks 及其关联数据对象的字典(如果您同时运行多个任务)作为实现任务的类的存储变量。

我不确定你使用的是什么语法,我认为它在 Swift 2 和 3 之间已经发生了变化。

在 Swift 2 中,使用 NSURLSession(session:dataTask:didReceiveData) 您可以执行以下操作:

if let existingData = taskDictionary[dataTask] 
    let newData : NSMutableData = existingData.mutableCopy()
    newData.append(data)
    taskDictionary[dataTask] = newData as NSData

在Swift3中,Data本身是可变的(没有对应的可变子类),所以相信你可以直接调用append。

无论哪种方式,这都会逐渐构建您的数据对象。任务完成后,您可以使用相关的委托函数尝试通过 try...catch 子句使用 data.writeToFile 或 data.write 保存数据(同样取决于您的 swift 版本)。

希望对您有所帮助。

【讨论】:

以上是关于Swift将下载的文件放入文件夹[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将 AppDelegate Swift 代码放入 Objective-C AppDelegate 文件并使其工作?

将命令放入变量中[重复]

用于创建文件、将变量放入其中以及从中读取变量的批处理语法[重复]

想要将列表列表中的每个元素放入文件中[重复]

Django项目中的.gitignore文件应该放入啥类型的文件[重复]

循环一个 json 文件并填充一个数组 Swift