如何使用writeToFile将文件保存在文件目录中?

Nis*_*ora 16 image ios writetofile swift

// directoryPath is a URL from another VC
@IBAction func saveButtonTapped(sender: AnyObject) {
            let directoryPath           =  NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as NSURL
            let urlString : NSURL       = directoryPath.URLByAppendingPathComponent("Image1.png")
            print("Image path : \(urlString)")
            if !NSFileManager.defaultManager().fileExistsAtPath(directoryPath.absoluteString) {
                UIImageJPEGRepresentation(self.image, 1.0)!.writeToFile(urlString.absoluteString, atomically: true)
                displayImageAdded.text  = "Image Added Successfully"
            } else {
                displayImageAdded.text  = "Image Not Added"
                print("image \(image))")
            }
        }
Run Code Online (Sandbox Code Playgroud)

我没有收到任何错误,但图像没有保存在文档中.

Leo*_*bus 30

问题在于您正在检查文件夹是否不存在但是您应该检查该文件是否存在.您的代码中的另一个问题是您需要使用url.path而不是url.absoluteString.您还使用"png"文件扩展名保存jpeg图像.你应该使用"jpg".

编辑/更新:

斯威夫特4

// get the documents directory url
let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
// choose a name for your image
let fileName = "image.jpg"
// create the destination file url to save your image
let fileURL = documentsDirectory.appendingPathComponent(fileName)
// get your UIImage jpeg data representation and check if the destination file url already exists
if let data = image.jpegData(compressionQuality:  1.0),
  !FileManager.default.fileExists(atPath: fileURL.path) {
    do {
        // writes the image data to disk
        try data.write(to: fileURL)
        print("file saved")
    } catch {
        print("error saving file:", error)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 注意:您也可以使用 writeToURL 而不是添加 .path! (2认同)
  • 如果您在答案中解释问题所在,而不是仅仅发布代码,将会更有帮助。不能指望未来的读者会浏览该问题的所有评论,有时评论甚至会被删除。 (2认同)

小智 24

这是我对Swift 3的回答,结合了以上2个答案:

let documentsDirectoryURL = try! FileManager().url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
// create a name for your image
let fileURL = documentsDirectoryURL.appendingPathComponent("Savedframe.png")


if !FileManager.default.fileExists(atPath: fileURL.path) {
    do {
        try UIImagePNGRepresentation(imageView.image!)!.write(to: fileURL)
            print("Image Added Successfully")
        } catch {
            print(error)
        }
    } else {
        print("Image Not Added")
}
Run Code Online (Sandbox Code Playgroud)


小智 5

swift 4.2 中的扩展方法

import Foundation
import UIKit

extension UIImage {

    func saveToDocuments(filename:String) {
        let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
        let fileURL = documentsDirectory.appendingPathComponent(filename)
        if let data = self.jpegData(compressionQuality: 1.0) {
            do {
                try data.write(to: fileURL)
            } catch {
                print("error saving file to documents:", error)
            }
        }
    }

}
Run Code Online (Sandbox Code Playgroud)