首页 > 解决方案 > Swift 4.0 - 无法在 iOS 中创建空文本文件

问题描述

下面是我的代码 - 我试图获取文档目录路径并使用标准 FileManager 单例尝试创建文件,但我无法创建文件,因为错误 -

无法存储数据:错误域=NSCocoaErrorDomain Code=4“文件“CrashLog.txt”不存在。”

UserInfo={NSFilePath=file:///Users/ABC/Library/Developer/CoreSimulator/Devices/87317777-63E7-422B-A55F-878E3267AFB8/data/Containers/Data/Application/4B41AA87-E4B9-4EE4-A67F-AC3B018913CC/ Documents/CrashLog, NSUnderlyingError=0x600000244ec0 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}

开发中的代码 -

let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
if (paths.count > 0) {
    let documentsDirectory = paths[0]
    let logFilePath = URL(fileURLWithPath: documentsDirectory).appendingPathComponent("CrashLog.txt").absoluteString
    let _string = "Hello"
    //Create file at given path
    let data = _string.data(using: .utf8)
    //let attributes = FileManager.default.attributesOfItem(atPath: logFilePath)
    let fileExists : Bool = FileManager.default.fileExists(atPath: logFilePath)
    print(fileExists)
    let isFileCreated =  FileManager.default.createFile(atPath: logFilePath, contents: data, attributes: nil)
    print("ifFileCreated", isFileCreated)
}

标签: iosswiftnsfilemanager

解决方案


这是我对你所做的事情的看法。采用基于 URL 的方式处理文件。写入数据的最佳方式(至少对于本示例而言)是使用 Data 的功能(不是 FileManager)再次使用 URL 写入文件。大多数情况下,您无需担心文件是否存在;就这样做,并处理出现的任何错误。

    if var url = try? FileManager.default.url(for: .documentDirectory,
                                              in: .userDomainMask,
                                              appropriateFor: nil,
                                              create: false) {
        url = url.appendingPathComponent("CrashLog").appendingPathExtension("txt")
        let _string = "Hello"
        if let data = _string.data(using: .utf8) {
            do {
                try data.write(to: url)
                print("successful")
            } catch {
                print("unsuccessful")
            }
        }
    }

推荐阅读