【发布时间】:2021-03-04 12:24:07
【问题描述】:
我已经杀死了几天试图保存文件并将其列出在主目录中。
首先我检索一个主目录 URL。 我尝试了两种选择:
docDir = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
docDir = URL(fileURLWithPath: NSHomeDirectory())
以任何方式在模拟器或我的 iPhone 上运行时,它只会导致 file:///
好吧,对于沙盒化的 iOS 应用来说,这也许没问题...
之后,我准备了一个文件 URL。我尝试了两种方法:
let file = docDir.appendingPathComponent("myfile.tmp")
let file = URL(fileURLWithPath: "myfile.tmp")
print(file.absoluteURL)
我在这里得到file:///myfile.tmp(两种变体)
最后我尝试创建文件
do {
try Data(count: 0).write(to: file2)
}
catch {
print("Failed to create file: '\(file)' because of: \(error)")
}
这就是我得到的
在模拟器上:
创建文件失败:'./myfile.tmp -- file:///' 因为:错误 Domain=NSCocoaErrorDomain Code=642 "你不能保存文件 “myfile.tmp”,因为卷“AirHD — данные”是只读的。” UserInfo={NSFilePath=/myfile.tmp, NSUnderlyingError=0x600000dea1f0 {Error Domain=NSPOSIXErrorDomain Code=30 "只读文件系统"}}
在 iPhone 上:
创建文件失败:'./myfile.tmp -- file:///' 因为:错误 Domain=NSCocoaErrorDomain Code=513 "你没有保存权限 “系统”文件夹中的文件“myfile.tmp”。” UserInfo={NSFilePath=/myfile.tmp, NSUnderlyingError=0x281725a40 {错误 Domain=NSPOSIXErrorDomain Code=1 "不允许操作"}}
但为什么在“系统”文件夹中? 它应该是我的 Documents 文件夹!
UPD:在 Info.plist 文件中设置密钥 UIFileSharingEnabled 和 LSSupportsOpeningDocumentsInPlace 也没有帮助。
【问题讨论】:
-
URL(fileURLWithPath: NSHomeDirectory())错误 -
尝试
let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("file.txt")然后try Data([97,98,99]).write(to: fileURL, options: .atomic)。这将创建一个带有 abc 字符串内容的文本文件 -
谢谢!您的评论确实帮助我找到了问题!
标签: ios swift url nsfilemanager