Swift.Как добавить текстовую строку в начало файла file.txt? - PullRequest
0 голосов
/ 04 июня 2019

Я использую небольшой регистратор, в котором я пишу в 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)")
        }
    }

С помощью этого кода я пишу в первой строке, но, тем не менее, я всегда переписываю то, что находится в первой строке.

Как я могу изменить это так, чтобы все, что находится в начале, было перенесено в строку ниже, а затем записано новое содержимое в первой строке?

Спасибо !!

1 Ответ

1 голос
/ 04 июня 2019

Все должно быть в порядке: сначала получите старые данные, а затем добавьте новые и напишите все.

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)")
}

Я не тестировал код, у него могут быть некоторые проблемы.

Другим возможным решением является запись в конце файла и инвертирование файла при его чтении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...