【发布时间】:2016-04-11 08:22:45
【问题描述】:
作为练习,我正在尝试编写一个将字符串记录到文本文件的日志记录类。我有我的应用程序可以从文件中写入和读取。但是,如果我尝试多次记录,它似乎只会获取最新的日志。
尝试
写作
private let file = "logfile.txt"
func write(text: String) {
let path = getDocumentsDirectory()
do {
try text.writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding)
}
catch let error {
print("error: \n \(error)")
}
}
阅读
func read() {
let path = getDocumentsDirectory()
do {
let text2 = try String(contentsOfFile: path, encoding: NSUTF8StringEncoding)
print("From Log: \n \(text2)")
}
catch let error {
print("error: \n \(error)")
}
}
func getDocumentsDirectory() -> String {
guard let dir : NSString = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first else {
return ""
}
let documentsDirectory : String = dir.stringByAppendingPathComponent(file)
return documentsDirectory
}
结果
当我尝试读取我的文件时,我只保存了最后一行。
问题
如果我的目标是不断地将新日志附加到文件中,并批量读取日志文件。我需要对我的代码进行哪些更改?
更多详情:
我在应用程序加载时写入文件:
Logger.shared.write("instance one writes")
Logger.shared.write("instance one writes again")
Logger.shared.write("instance one writes yet again")
然后尝试阅读:
Logger.shared.read()
输出:
来自日志:
实例一再次写入
【问题讨论】:
-
相反,您使用完全相同的方法 (
writeToFile(_:atomically:encoding:)) 会产生完全相同的问题,我会推荐完全相同的解决方案 (NSFileHandle)。语言差异几乎不值得一提,特别是因为接受的答案提供了一个查看文档的地方,而不是实际代码。 -
如果您愿意,还有一个类似的问题:stackoverflow.com/questions/4779877/…
-
@jtbandes 我找不到一个人在 Swift 中使用 NSFileHandle 的例子,就像你在两个帖子中那样。 .fileHandleForWritingAtPath 在 Swift 中不可用。
-
它是一个初始化器而不是一个静态方法;此处的文档中给出了 Obj-C 和等效的 Swift 语法:developer.apple.com/library/mac/documentation/Cocoa/Reference/…:
标签: swift logging writetofile