Нет способа "вставить" в файл вообще - или перейти к определенной строке, не читая все остальные, если они не имеют фиксированный размер (в байтах).
Обычно подход будет выглядеть примерно так:
- Начните писать новый файл
- Открыть существующий файл
- Скопировать первые x строк из старого файла в новый
- Написать новую строку
- Скопируйте оставшиеся строки из старого файла в новый
- Переместить старый в файл резервной копии
- Переместить новый файл на старое имя
- Удалить файл резервной копии
(Это гарантирует, что в любой точке есть как минимум старого файла в некоторой форме. Вы можете сделать его немного проще, если просто удалите старый файл, а затем переместите новый на место.)
Не забудьте убедиться, что это синхронизировано должным образом - вы не хотите, чтобы две копии этого алгоритма работали одновременно ...
РЕДАКТИРОВАТЬ: если у вас есть XML-файлы, то я бы предложил просто загрузить их в DOM (например, с помощью LINQ to XML), внести изменения, а затем сохранить их снова. Не рассматривайте это как неструктурированный текстовый файл.
Вы могли бы потенциально сделать это более эффективным, используя XmlReader
и XmlWriter
- но вам, безусловно, придется прочитать весь исходный файл и записать новый файл. Вы тестировали простой код и нашли его слишком медленным? Как часто ты это делаешь? Насколько большие файлы?