2013-12-17 62 views
7

我有一個369個不同名稱的列表,我想將這些名稱打印到csv文件中。一切順利,直到我看看輸出的csv文件,它只有251行。我嘗試輸出到一個.txt,而它仍然只輸出251行。我通過調試器,它仍然調用writer.WriteLine()369次。爲什麼我的C#程序只能將251行寫入文件?

是否存在某種形式的書寫限制?如果是這樣,爲什麼251?我如何編寫所有369個名字?

這裏是我的代碼,以防萬一:

List<String> names = new List<String>(); 

//Retrieve names from a separate source. 

var writer = new StreamWriter(File.OpenWrite(@"C:names.txt")); 
     for (int i = 0; i < names.Count; i++) 
     { 
      System.Console.WriteLine(names[i].ToString()); 
      writer.WriteLine(names[i].ToString()); 
     } 
     System.Console.Write(names.Count); 

在控制檯上的輸出顯示的所有369名和names.Count打印369

+3

關閉作家 – jglouie

+0

你能分享你用於輸入的文本文件嗎 – Raymund

+0

沖水,那就是 – TravellingGeek

回答

11

您需要關閉的StreamWriter,最好的辦法是使用using塊,像這樣:

using(StreamWriter writer = new StreamWriter(File.OpenWrite("C:\\names.txt")) { 
    // code here 
} 

using塊將總是通話StreamWriter.Dispose方法,有效果沖洗溪流。目前,您在StreamWriter實例中有緩衝但未寫入的數據。

+0

謝謝!簡單地調用writer.close就行了,但我會確保從現在開始使用'using'。不能相信這是一個簡單的錯誤... –

4

你不顯示任何地方,你正確地關閉writer。如果你的程序異常終止,作者永遠不會被刷新到磁盤。

嘗試使用using塊。

// NOTE: The is should be C:\names.txt. The posted code is missing a \ 
using (var writer = new StreamWriter(File.OpenWrite(@"C:names.txt"))) 
{ 
    // Your code here 
} 
0
List<String> names = new List<String>(); 
var sb = new StringBuilder() 
//Retrieve names from a separate source. 


     for (int i = 0; i < names.Count; i++) 
     { 
      System.Console.WriteLine(names[i].ToString()); 
      sb.WriteLine(names[i].ToString()); 
     } 
using (var writer = new StreamWriter(File.OpenWrite(@"C:\names.txt"))) 
{ 
    writer.WriteLine(sb.ToString()); 
} 
1

您必須在上次寫入後清空緩衝區。把作家放在使用聲明中。 寫入器刷新緩衝區的配置方法。你也可以調用writer.Flush()。但是,由於您仍然必須確保將作者放置在其他人建議的使用說明中。

+0

只要調用'Dispose()'和'using'不一樣,除非'Dispose()'在'finally'塊中。 –

+0

@EricJ。你是對的。 –

相關問題