2014-10-29 54 views
1

我有以下文本内的文本文件:C#的StreamWriter写在当前的文本文件

[username][0] 

我已经打开使用的StreamWriter文件,我想用StreamWriter.Write方法来改变01 。我怎样才能做到这一点?

+0

用'StreamWriter'改变流中间的一个字符有点痛苦,特别是如果你只能用'.Write' ...覆盖整个文件的一个选项吗? – 2014-10-29 05:48:23

+0

这是否需要使用'StreamWriter'完成?使用'FileStream'查找文本,在该位置写入,然后关闭流。 – 2014-10-29 06:03:53

+0

@SriramSakthivel,你可以做到这一点。一个'StreamWriter'确实写入一个'Stream',而一个'FileStream'。你甚至可以在同一个'FileStream'上创建一个'StreamReader'来找到正确的位置。 – jmcilhinney 2014-10-29 06:08:35

回答

1

如果你知道字符(S)的确切字节位置要覆盖,那么你可以做这样的事情:

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'); 
} 
相关问题