Если вы хотите сделать замену «на месте» (то есть вы не хотите использовать другой, временный файл), вы должны сделать это с FileStream .
У вас есть пара опций, вы можете Read
в потоке файлов, пока не найдете нужный текст, а затем выдать Write
. Имейте в виду, что FileStream
работает на уровне байтов, поэтому вам необходимо принять во внимание кодировку символов. Encoding.GetString
выполнит преобразование.
Кроме того, вы можете искать текст и отмечать его положение. Затем вы можете открыть FileStream и просто Seek
до этой позиции. Тогда вы можете выдать Write
.
Это может быть самый эффективный способ, но он определенно более сложный, чем наивный вариант. С наивной реализацией вы:
Второго файла нет, но вы ограничены объемом памяти системы. Если вы знаете, что всегда имеете дело с небольшими файлами, то это может быть вариант. В противном случае вам необходимо ознакомиться с кодировкой символов и файловыми потоками.
Вот еще один SO вопрос по теме (включая пример кода): Редактирование текстового файла на месте через C #