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 -createFileAtPath 失败并出现 NSInvalidArgumentException