2011-07-12 17 views
0

我想通過使用流讀取器的文本文件一行行,當我遇到特定的文本時,我想添加一個新行到該文件。但是當我這樣做時,下一行的第一部分(大約一半)被切斷。我只想這樣做一次,這就是爲什麼「跳過」變量存在。下面是我在做什麼:StreamWriter.WriteLine方法切斷下一行

   var fileStream = new FileStream(fileName, FileMode.Open); 
       var writer = new StreamWriter(fileStream); 
       var reader = new StreamReader(fileName); 
       string line; 
       var skip = false; 
       using (writer) { 
        using (reader) { 
         while ((line = reader.ReadLine()) != null) { 
          if (line.Contains("some text") && !skip) { 
           writer.WriteLine("some text something else"); 
           skip = true; 
          } 
         } 
        } 
       } 
       fileStream.Close(); 

我在這裏幹什麼什麼了嗎?

回答

3

編輯:啊,我剛剛看到你正在嘗試讀取和寫入相同的文件。

你不應該這樣做 - 它的取代現有的文本,而不是插入額外的數據。 不能只是在文件中插入數據 - 這不是文件系統的工作方式。

取而代之的是,從一個文件中讀取數據,寫入另一個文件,然後在需要時再移動文件。

我還建議你有一個變量的整個範圍的using聲明,而不是像你在這裏一樣使用它們。這樣的事情:

void CopyAndEdit(string inputFile, string outputFile) 
{ 
    // In .NET 4 you can use File.ReadLines which will 
    // return an IEnumerable<string> 
    using (TextReader reader = File.OpenText(inputFile)) 
    { 
     using (TextWriter writer = File.CreateText(outputFile)) 
     { 
      bool editing = true; 
      string line; 
      while ((line = reader.ReadLine()) != null) 
      { 
       writer.WriteLine(line); 
       if (editing && line.Contains("some text")) 
       { 
        editing = false; 
        writer.WriteLine("some text something else"); 
       } 
      } 
     } 
    } 
} 
+0

這樣做。但我想知道爲什麼我不能在同一個文件中讀寫。事實上,我沒有得到任何異常,只是奇怪的行爲。在某些情況下,我甚至可以通過這樣做達到我想要的效果! – Vale