Swift macOS开发:如何在文档目录追加数据而非覆盖原有内容
Swift macOS 文件追加写入解决方案
你当前使用的write(to:)方法默认会覆盖原有文件内容,要实现追加新数据并保留旧内容,可以通过FileHandle来完成,以下是完整的实现代码:
let downloadsUrl = FileManager.default.urls(for: .downloadsDirectory, in: .allDomainsMask)[0] let fileUrl = downloadsUrl.appendingPathComponent("fl10_accounts.xml") // 要追加的内容,假设你的data是String类型 let contentToAppend = "你的新数据内容" guard let dataToAppend = contentToAppend.data(using: .utf8) else { print("无法将字符串转换为Data") return } do { // 如果文件不存在,先创建空文件 if !FileManager.default.fileExists(atPath: fileUrl.path) { try Data().write(to: fileUrl) } // 打开文件并定位到末尾 guard let fileHandle = FileHandle(forWritingAtPath: fileUrl.path) else { print("无法打开文件") return } defer { fileHandle.closeFile() // 确保文件最终会被关闭 } fileHandle.seekToEndOfFile() fileHandle.write(dataToAppend) print("数据已追加到文件") } catch { print("写入错误:\(error.localizedDescription)") }
关键说明:
- 替换原代码里的强制解包(
!)和try!,改用可选绑定和do-catch处理错误,避免程序崩溃 - 先判断文件是否存在,不存在则创建空文件,否则
FileHandle无法打开不存在的文件 seekToEndOfFile()会将文件指针移到末尾,保证新数据追加在旧内容后面- 如果你的
data原本就是Data类型,直接跳过字符串转Data的步骤即可
内容的提问来源于stack exchange,提问作者Muhammad Taha
相关产品推荐
相关产品推荐

