2016-03-03 63 views
1

我有一个名为“Image.png”的图像文件,并将其保存在我的主包(Project Navigator层次结构中的ViewController.swift文件右侧)中。我想将此图像的副本保存到临时目录。我从来没有做过,我可以使用哪些代码?将图像文件保存到临时目录

回答

9

像这样的东西应该做的伎俩。我假设你想在Swift中得到答案。

/** 
* Copy a resource from the bundle to the temp directory. 
* Returns either NSURL of location in temp directory, or nil upon failure. 
* 
* Example: copyBundleResourceToTemporaryDirectory("kittens", "jpg") 
*/ 
public func copyBundleResourceToTemporaryDirectory(resourceName: String, fileExtension: String) -> NSURL? 
{ 
    // Get the file path in the bundle 
    if let bundleURL = NSBundle.mainBundle().URLForResource(resourceName, withExtension: fileExtension) { 

     let tempDirectoryURL = NSURL.fileURLWithPath(NSTemporaryDirectory(), isDirectory: true) 

     // Create a destination URL. 
     let targetURL = tempDirectoryURL.URLByAppendingPathComponent("\(resourceName).\(fileExtension)") 

     // Copy the file. 
     do { 
      try NSFileManager.defaultManager().copyItemAtURL(bundleURL, toURL: targetURL) 
      return targetURL 
     } catch let error { 
      NSLog("Unable to copy file: \(error)") 
     } 
    } 

    return nil 
} 

虽然我不确定为什么要这样做,而不是直接访问bundle资源。

+0

多谢,马特! – dimery2006

+0

没有问题@ dimery2006,如果它帮助请考虑接受答案:) – mszaro

0

斯威夫特4.x的版本mszaro的回答

/** 
* Copy a resource from the bundle to the temp directory. 

* Returns either NSURL of location in temp directory, or nil upon failure. 
* 
* Example: copyBundleResourceToTemporaryDirectory("kittens", "jpg") 
*/ 
public func copyBundleResourceToTemporaryDirectory(resourceName: String, fileExtension: String) -> NSURL? 
{ 
    // Get the file path in the bundle 
    if let bundleURL = Bundle.main.url(forResource: resourceName, withExtension: fileExtension) { 

     let tempDirectoryURL = NSURL.fileURL(withPath: NSTemporaryDirectory(), isDirectory: true) 

     // Create a destination URL. 
     let targetURL = tempDirectoryURL.appendingPathComponent("\(resourceName).\(fileExtension)") 

     // Copy the file. 
     do { 
      try FileManager.default.copyItem(at: bundleURL, to: targetURL) 
      return targetURL as NSURL 
     } catch let error { 
      NSLog("Unable to copy file: \(error)") 
     } 
    } 

    return nil 
} 
+1

'NSURL'不适用于Swift 4.不要使用它。附加文件名和扩展名的正确语法是'let targetURL = tempDirectoryURL.appendingPathComponent(resourceName).appendingPathExtension(fileExtension))' – vadian