Как подготовить текст к файлу в Swift или Objective C?
Обратите внимание, что я не спрашиваю, как добавить текст в конце файла. Я спрашиваю, как добавить текст в начало файла.
let handle = try FileHandle(forWritingTo: someFile)
//handle.seekToEndOfFile() // This is for appending
handle.seek(toFileOffset: 0) // Me trying to seek to the beginning of file
handle.write(content)
handle.closeFile()
Похоже мой content
записывается в начале файла, но он также заменяет существующее согласие... Спасибо!
2 ответа
Одним из разумных решений является запись нового содержимого во временный файл, а затем добавление существующего содержимого в конец временного файла. Затем переместите временный файл поверх старого.
Когда вы ищете точку в существующем файле и затем выполняете запись, существующее содержимое перезаписывается с этой точки. Вот почему ваш нынешний подход терпит неудачу.
Как правило, большинство файловых систем не имеют встроенной поддержки добавления данных в файлы. Аналогично, большинство API-интерфейсов файлового ввода-вывода тоже этого не делают.
Для добавления данных сначала необходимо сместить все существующие данные дальше по файлу, чтобы освободить место для новых данных в начале. Обычно вы делаете это, начиная с конца, читая порцию данных, записывая эти данные в исходную позицию плюс длину данных, которую вы надеетесь в конечном итоге предварять, а затем повторяя следующую порцию ближе к началу файла. Таким образом, вы постепенно сдвигаете все вниз. Только после того, как вы сделали все это, вы можете безопасно записывать новые данные в начале файла.
Честно говоря, если есть какой-то способ избежать этого, вы должны попытаться. Производительность может быть ужасной, если файл большой и / или вы делаете это часто.