2015-06-17 76 views
6

這段代碼在VS 2010中工作得很完美。現在我有了VS 2013,它不再寫入文件。它沒有錯誤或任何東西。 (我在記事本中得到一個警報++,說明該文件已被更新,但並沒有什麼寫的。)StreamWriter不能在C#中工作

這一切看起來好像沒什麼問題。有任何想法嗎?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      String line; 
      try 
      { 
       //Pass the file path and file name to the StreamReader constructor 
       StreamReader sr = new StreamReader("C:\\Temp1\\test1.txt"); 
       StreamWriter sw = new StreamWriter("C:\\Temp2\\test2.txt"); 

       //Read the first line of text 
       line = sr.ReadLine(); 

       //Continue to read until you reach end of file 
       while (line != null) 
       { 
        //write the line to console window 
        Console.WriteLine(line); 
        int myVal = 3; 
        for (int i = 0; i < myVal; i++) 
        { 
         Console.WriteLine(line); 
         sw.WriteLine(line); 
        } 
        //Write to the other file 
        sw.WriteLine(line); 
        //Read the next line 
        line = sr.ReadLine(); 
       } 

       //close the file 
       sr.Close(); 
       Console.ReadLine(); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine("Exception: " + e.Message); 
      } 
      finally 
      { 
       Console.WriteLine("Executing finally block."); 
      } 
     } 
    } 
} 
+0

你在尋找正確的目錄嗎?你是否打開該文件作爲完整性檢查? – user1666620

+0

嘗試顯式刷新以及。 – Lloyd

+4

我沒有看到任何你稱之爲sw.Close();如果你這樣做,寫入將被刷新並關閉文件。此外,你應該看看包裹的StreamReader和StreamWriter使用塊 - 它們都實現IDisposable,而當你離開使用塊 – thorkia

回答

5

您需要在寫入後寫入StreamWriter Flush()

默認的StreamWriter被緩衝,這意味着它不會輸出,直到它接收一個沖洗()或關閉()調用。

此外,您還可以嘗試關閉它是這樣的:

sw.Close(); //or tw.Flush(); 

你也可以看看StreamWriter.AutoFlush Property

獲取或設置指示的StreamWriter是否會刷新 其緩衝值在每次調用 StreamWriter.Write之後將其發送到基礎流。

另一種選擇,現在是一個非常流行和推薦的日子是使用using statement照顧它。

提供了一種方便的語法,可以確保正確使用ID爲一次性的對象 。

例子:

using(var sr = new StreamReader("C:\\Temp1\\test1.txt")) 
using(var sw = new StreamWriter("C:\\Temp2\\test2.txt")) 
{ 
    ... 
} 
+4

或事件更好,關閉它 –

+2

您應該在StreamReader和StreamWriter上使用「using」語句。 – tdbeckett

+0

@tdbeckett: - 是的,這是標準和推薦的方式!感謝您指出! –

7

您需要關閉的StreamWriter。像這樣:

using(var sr = new StreamReader("...")) 
using(var sw = new StreamWriter("...")) 
{ 
    ... 
} 

即使發生異常,這也會關閉流。

+2

+1最佳「最佳實踐」。所有的IDisposable對象應該(幾乎總是)與using語句配對。 –

+0

是的,應該使用使用語句 - 不需要明確地調用Flush/Close,這樣更整潔。 ((line = sr.ReadLine())!= null) //將該行寫入控制檯窗口 Console.WriteLine(line); – Polyfun

+0

該行可以通過將readline和比較 組合起來進行清理。 int myVal = 3; 對(INT I = 0; I'設爲myVal;我++){ 控制檯。的WriteLine(線); sw.WriteLine(line); } //寫入其他文件 sw.WriteLine(line); } – thorkia