2014-10-29 3 views
1

У меня есть текстовый файл со следующим текстом внутри:C# StreamWriter записи поверх текущего текстового файл

[username][0] 

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

+0

это несколько болезненного изменить один символ в середине потока с 'StreamWriter', особенно если вы только можете использовать' .Write' ... является ли перезаписывать весь файл вариант? –

+0

Нужно ли это делать с помощью StreamWriter? Используйте 'FileStream', найдите текст, напишите в этой позиции, затем закройте поток. –

+0

@SriramSakthivel, вы можете сделать оба. По умолчанию 'StreamWriter' пишет запись в' Stream', а по умолчанию - FileStream. Вы даже можете создать 'StreamReader' поверх того же' FileStream', чтобы найти правильную позицию. – jmcilhinney

ответ

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'); 
} 
Смежные вопросы