You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:32:06