gpt4 book ai didi

swift - FileHandle 不接受我的 URL 进行写访问

转载 作者:搜寻专家 更新时间:2023-11-01 05:52:20 25 4
gpt4 key购买 nike

我想打开一个唯一命名的输出文件来写入 plist 或数据,但没有运气使用 init(fileURLWithPath:) 或 init(string:) 的 URL 例程获取句柄

func NewFileHandleForWritingFile(path: String, name: String, type: String, outFile: inout String?) -> FileHandle? {
let fm = FileManager.default
var file: String? = nil
var uniqueNum = 0

while true {
let tag = (uniqueNum > 0 ? String(format: "-%d", uniqueNum) : "")
let unique = String(format: "%@%@.%@", name, tag, type)
file = String(format: "%@/%@", path, unique)
if false == fm.fileExists(atPath: file!) { break }

// Try another tag.
uniqueNum += 1;
}

outFile = file!

do {
let fileURL = URL.init(fileURLWithPath: file!)
let fileHandle = try FileHandle.init(forWritingTo: fileURL)
print("\(file!) was opened for writing")
//set the file extension hidden attribute to YES
try fm.setAttributes([FileAttributeKey.extensionHidden: true], ofItemAtPath: file!)
return fileHandle
} catch let error {
NSApp.presentError(error)
return nil;
}
}

调试器显示

debugger shows

对于这个 URL init 例程添加了方案 (file://),但在其他方面与另一个相同,我更喜欢使用路径时抛出 reutrning (-1) 的更新方法。抛出的错误 (2) 是一个 ENOENT(没有这样的实体!?),因为我需要一个句柄来写入 我很困惑怎么才能得到一个?示例路径是在桌面上创建的一个新文件夹,用于分类。

最佳答案

与之前的答案不同,我建议使用 Data 的 write(to:options:) API 而不是 FileManager 的 createFile(atPath:contents:attributes:),因为它是基于 URL 的 API,通常优于基于路径的 API。 Data 方法还会抛出错误,而不是在失败时返回 false,因此如果出现问题,您可以告诉用户原因。

尝试 Data().write(to: fileURL, options: [])

我还建议将基于路径的 FileManager.fileExists(atPath:) 替换为基于 URL 的 checkResourceIsReachable():

if false == ((try?fileURL.checkResourceIsReachable()) ?? false)

关于swift - FileHandle 不接受我的 URL 进行写访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45684329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com