C # StreamWriter пишет поверх текущего текстового файла

1

У меня есть текстовый файл со следующим текстом внутри:

[username][0]

Я открыл файл с помощью StreamWriter, и я хочу изменить 0 на 1 с помощью метода StreamWriter.Write. Как я могу это сделать?

  • 0
    Несколько болезненно менять один символ в середине потока с помощью StreamWriter , особенно если вы можете использовать только .Write ... Можно ли перезаписать весь файл?
  • 0
    Это должно быть сделано с StreamWriter ? Используйте FileStream найдите текст, напишите в этой позиции, затем закройте поток.
Показать ещё 2 комментария
Теги:

1 ответ

1

Если вы знаете точную позицию байта символа (ов), который вы хотите переписать, вы можете сделать что-то вроде этого:

using (var writer = new StreamWriter(filePath))
{
    writer.BaseStream.Seek(bytePos, SeekOrigin.Begin);
    writer.Write('1');
}

Если вы не знаете точную позицию байта, вы можете сделать что-то вроде этого:

using (var file = new FileStream(filePath, FileMode.Open))
using (var reader = new StreamReader(file))
using (var writer = new StreamWriter(file))
{
    var openBracketCount = 0;

    // Keep reading characters until the second open bracket is found.
    do
    {
        var ch = Convert.ToChar(reader.Read());

        if (ch == '[')
        {
            openBracketCount++;
        }
    } while (openBracketCount < 2);

    writer.Write('1');
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню