我正在实现一个小型记录器,在其中写入 TXT 文件。
我希望最后一个事件位于文件顶部,但我无法使其正常工作。互联网上的所有示例都使用“fileHandle.seekToEndOfFile()”在文件末尾写入。
这就是我所拥有的:
private static func writeToFile(text: String) {
guard let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first else { return }
guard let writePath = NSURL(fileURLWithPath: path).appendingPathComponent(Logger.folderName) else { return }
let fileManager = FileManager.default
try? fileManager.createDirectory(atPath: writePath.path, withIntermediateDirectories: true)
let file = writePath.appendingPathComponent(Logger.fileName)
if !fileManager.fileExists(atPath: file.path) {
do {
try "".write(toFile: file.path, atomically: true, encoding: String.Encoding.utf8)
} catch _ {
}
}
let msgWithLine = text + "\n"
do {
let fileHandle = try FileHandle(forWritingTo: file)
//fileHandle.seekToEndOfFile()
fileHandle.write(msgWithLine.data(using: .utf8)!)
fileHandle.closeFile()
} catch {
print("Error writing to file \(error)")
}
}
对于这段代码,我写在第一行,但尽管如此,我总是重写第一行的内容。
我怎样才能将其更改为第一行中的内容被带到下面一行,然后在第一行中写入新内容?
谢谢你!!
这应该没问题:
首先,获取旧数据,然后附加新数据并写入所有内容。
let msgWithLine = text + "\n"
do {
let fileHandle = try FileHandle(forWritingTo: file)
fileHandle.seek(toFileOffset: 0)
let oldData = try String(contentsOf: file, encoding: .utf8).data(using: .utf8)!
var data = msgWithLine.data(using: .utf8)!
data.append(oldData)
fileHandle.write(data)
fileHandle.closeFile()
} catch {
print("Error writing to file \(error)")
}
我没有测试代码,可能有一些问题。
另一种可能的解决方案是在文件末尾写入并在读取时反转文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)