ios - 在 Swift 5 (iOS 12) 中写入磁盘时出错
问题描述
我想将 JSON 文本(as String
)存储在文本文件中,或者每次我有新数据要添加时追加。但是,以下代码始终返回 -1 作为output.write()
. 我做错了什么,但我不知道是什么:
let fileURL = (try! FileManager.default.urls(for: FileManager.SearchPathDirectory.documentDirectory, in: FileManager.SearchPathDomainMask.userDomainMask)).first!.appendingPathComponent("data.json")
let json = "..."
let tenGB = 10 * 1000 * 1000 * 1000
if let output = OutputStream(url: fileURL, append: true) {
output.open()
let bytes = output.write(json, maxLength: tenGB)
if bytes < 0 {
print("Failure writing to disk")
} else if bytes == 0 {
print("Failure writing to disk (capacity)")
} else {
print("\(bytes) bytes written to disk")
}
output.close()
} else {
print("Unable to open file")
}
我不希望数据是 10 GB,更多的是 kB-MB 范围,但我想我会给它一个很大的价值。
的输出streamError
:Error Domain=NSPOSIXErrorDomain Code=22 "Invalid argument" UserInfo={_kCFStreamErrorCodeKey=22, _kCFStreamErrorDomainKey=1}
解决方案
正如我们在评论中理解的那样,问题来自 10 GB
您需要的是写入数据作为数据的大小切换行:
let bytes = output.write(json, maxLength: tenGB)
和
bytes = output.write(json, maxLength: json.utf8.count)
你需要在那之后附加数据,看看这个问题做类似的问题
推荐阅读
- git - Git:拉取原点,然后合并仍然没有合并我的分支
- python - 对谷歌的http请求返回空的python套接字
- nim-lang - Nim:使用只读内存映射文件
- javascript - Remove vertical grid lines gridHelper Three.js
- c# - C# POST request with Json containing an array
- c# - Converting selected words to a specific casing
- python - Pandas group by rows chained across two columns
- version-control - How can I find out which release is associated with a commit in Mercurial?
- amazon-web-services - Can AWS EC2 describe-volumes show ownerarn?
- python - django redirect throw 302 and not redirecting