Добавить строку в начало файла - PullRequest
0 голосов
/ 04 июля 2018

Я хочу добавить строку в начале моего файла и в конце файла.

Я добавляю строку в конце, как это,

func writeToFile(content: String, fileName: String) {

    let contentToAppend = content+"\n"
    let filePath = NSHomeDirectory() + "/Documents/" + fileName

    //Check if file exists
    if let fileHandle = FileHandle(forWritingAtPath: filePath) {
        //Append to file
        fileHandle.seekToEndOfFile()

        fileHandle.write(contentToAppend.data(using: String.Encoding.utf8)!)
    }
    else {
        //Create new file
        do {
            try contentToAppend.write(toFile: filePath, atomically: true, encoding: String.Encoding.utf8)
        } catch {
            print("Error creating \(filePath)")
        }
    }
}

Я пытался fileHandle.seek(toFileOffset: 0), но он удаляет мою первую строку из файла. Я хочу добавить 2 строки текста в начале файла. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 04 июля 2018

Вы не можете использовать дескриптор файла для вставки данных в существующий файл. Он поддерживает только перезапись всего или части файла или добавление в конец файла.

Вам необходимо создать новый файл, сначала написав нужную строку в начале, затем записав содержимое существующего файла, а затем записав нужную строку в конце.

Вот расширение, которое вы можете использовать для добавления содержимого существующего файла в дескриптор файла. Предполагается, что дескриптор файла уже настроен для записи.

extension FileManager {
    func appendContentsOfFile(at fileURL: URL, to outputHandle: FileHandle) throws {
        let inputHandle = try FileHandle(forReadingFrom: fileURL)
        while true {
            let data = inputHandle.readData(ofLength: 4096)
            if data.isEmpty {
                break
            } else {
                outputHandle.write(data)
            }
        }
        inputHandle.closeFile()
    }
}

Используя это, решение вашего вопроса достигается с помощью следующих шагов:

  1. Создание FileHandler для записи в новый файл.
  2. Запишите данные для начальной строки.
  3. Вызовите FileManager.default.appendContentsOfFile (по адресу: someFileURL, to: yourFileHandle), чтобы добавить существующий файл.
  4. Запишите данные для конечной строки.
  5. Закройте ручку.
  6. При необходимости удалите старый файл, переименуйте новый файл.
...