NSFileManager 创建文件失败

Posted

技术标签:

【中文标题】NSFileManager 创建文件失败【英文标题】:NSFileManager Failing on create file 【发布时间】:2017-09-11 00:21:25 【问题描述】:

这是我保存图像的功能。

static func getDirectoryPath() -> String 
    let path = (NSSearchPathForDirectoriesInDomains(.picturesDirectory, .userDomainMask, true))[0]
    return path


static func savePhoto(with path: String, image: UIImage) 
    let fM = FileManager.default
    let path = getDirectoryPath() + path
    let data = UIImageJPEGRepresentation(image, 0.5)
    let success = fM.createFile(atPath: path, contents: data, attributes: nil)
    print("File creation was \(success)")

然后我就这样称呼它

      let path = "/SpotCheck_\(spot.name)_Photo\(indx).jpg"
      PhotoManager.savePhoto(with: path, image: photo)

当我调用创建文件时,每次都返回 false 并且照片没有保存。

编辑:问题是第二行需要 documentDirectory 而不是 PicturesDirectory。如下图:

    let path = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true))[0]

【问题讨论】:

这是 ios 还是 macOS?为什么使用FileManager 而不是Data write 方法? 你检查过你的沙盒配置了吗? 这是针对 iOS 的,我不确定使用哪种方法(文件管理器或写入)。我可以尝试看看 write 方法是否会做我想要的,但你知道为什么文件管理器不起作用吗?还有理由使用一种方法而不是另一种方法。 【参考方案1】:

iOS 应用在沙盒中运行。您无法写入图片文件夹。

如果您想将图片添加到用户的照片库,请使用phphotoLibrary 或仅使用UIImageWriteToSavedPhotosAlbum

如果您只是想将图像保存在自己的应用中,请将文件存储在 Documents 文件夹中。

仅供参考 - 在 iOS 中使用 NSSearchPathForDirectoriesInDomains 时,唯一有用的目录是:

图书馆目录 文档目录 缓存目录 应用支持目录

所有其他仅在 macOS 中有用。

【讨论】:

那我可以在iOS的文档目录中写入图片吗?我想将照片保留在我的应用程序中,但不想将它们保存到用户照片库中。 那是完全不同的。是的,Documents 文件夹是每个应用程序沙箱的一部分,这是应用程序写入其数据的正常位置。我已经更新了我的答案。

以上是关于NSFileManager 创建文件失败的主要内容,如果未能解决你的问题,请参考以下文章

NSFileManager - 创建一个只读文件

iphone NSFilemanager 没有创建文件

NSFileManager创建文件夹

NSFileManager -createFileAtPath 失败并出现 NSInvalidArgumentException

NSFileManager 无法创建文件

我们如何关闭 NSFileManager?