ios - 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)
}
解决方案
这是我对你所做的事情的看法。采用基于 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")
}
}
}
推荐阅读
- ios - 如何在单元测试目标中的测试用例之间删除应用程序?
- powershell - 获取分钟并使用 SendKeys 输出它们
- ios - 将默认数据库路径更改为组路径后,iOS RealmSwift 不会更新模型
- amazon-web-services - 具有多个登录选项的 aws cognito 池
- python-xarray - 为非发散数据更改 xarray 中的默认颜色条
- vhdl - VHDL 中的过程从不返回值
- c++ - 在 MFC 中显示 .NET 图表控件
- javascript - jQuery DrawSVG:滚动绘制完成时调用函数?
- postgresql - 查询将未知值转换为 json
- delphi - Delphi IBX TIBSQL.ExecQuery 是否有奇怪的事务要求(FStreamedActive 因素)?