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

iOS中写入文件成功但读取同一文件失败,求技术解答

iOS 文件写入成功但读取失败的问题解决

问题出在读取文件的代码行:

let dataContent = try Data(contentsOf: URL(fileURLWithPath: fileURL.absoluteString))

错误原因

fileURL.absoluteString返回的是带file://协议前缀的完整URL字符串(比如file:///xxx/test.txt),而URL(fileURLWithPath:)方法需要的是本地文件系统的纯路径字符串(不带file://前缀,比如/xxx/test.txt)。用带协议的字符串创建路径URL,会导致系统找不到对应的文件。

修正方案

直接使用已经构建好的fileURL即可,不需要重新创建URL:

let dataContent = try Data(contentsOf: fileURL)

如果一定要通过路径字符串创建,应该用fileURL.path获取不带协议的本地路径:

let dataContent = try Data(contentsOf: URL(fileURLWithPath: fileURL.path))

完整修正后的代码

import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("Hello, world!")
            .padding()
    }

    init() {
        let filename = "test.txt"
        let data: Data = "My file content test".data(using: .utf8)!
        let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
        let fileURL = documentsDirectory.appendingPathComponent(filename)
        do {
            print("dbg_001 : \(fileURL)")
            try data.write(to: fileURL)
            print("dbg_002 : \(fileURL.absoluteString)")
            // 直接使用已有的fileURL
            let dataContent = try Data(contentsOf: fileURL)
            print("dbg_003")
            // 可选:验证读取内容
            if let content = String(data: dataContent, encoding: .utf8) {
                print("读取的内容:\(content)")
            }
        } catch {
            print("Error: \(String(error.localizedDescription))")
        }
    }
}

运行修正后的代码,就能成功读取刚写入的文件内容了。

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:07:25