2013-12-17 17 views
7

Tôi đã có danh sách 369 tên khác nhau và tôi muốn in các tên này thành tệp csv. Tất cả sẽ tốt cho đến khi tôi xem xét tệp csv đã xuất và nó chỉ có 251 hàng. Tôi đã cố gắng xuất ra một .txt thay vào đó, và nó vẫn chỉ xuất ra 251 hàng. Ive bước qua với trình gỡ rối và nó vẫn đang gọi writer.WriteLine() 369 lần.Tại sao chương trình C# của tôi chỉ ghi 251 hàng vào một tệp?

Có hạn chế viết nào không? Nếu vậy, tại sao 251? Làm cách nào để viết tất cả 369 tên?

Dưới đây là mã của tôi chỉ trong trường hợp:

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); 

Sản lượng trên console cho thấy tất cả 369 tên và in names.Count 369.

+3

Đóng nhà văn – jglouie

+0

bạn có thể chia sẻ tệp văn bản mà bạn sử dụng để nhập – Raymund

+0

xả nước hay không, đó là từ – TravellingGeek

Trả lời

11

Bạn cần phải đóng StreamWriter của bạn, cách tốt nhất là sử dụng một khối using như vậy:

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

Các using khối sẽ luôn gọi các .Dispose phương pháp StreamWriter trong đó có hiệu lực thi hành xả luồng. Hiện tại, bạn có dữ liệu đệm nhưng không được ghi trong phiên bản StreamWriter.

+0

Cảm ơn! Đơn giản chỉ cần gọi writer.close làm việc nhưng tôi chắc chắn sẽ bắt đầu sử dụng 'using' từ bây giờ. Không thể tin rằng đó là một lỗi đơn giản như vậy ... –

4

Bạn không hiển thị bất cứ nơi nào mà bạn thích gần writer. Nếu chương trình của bạn chấm dứt bất thường, người viết sẽ không bao giờ bị đỏ mặt vào đĩa.

Hãy thử sử dụng khối 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

Bạn phải xả bộ đệm sau lần viết cuối cùng. Đặt người viết bên trong sử dụng câu lệnh. Phương pháp vứt bỏ bộ đệm xả của bộ ghi. Bạn cũng có thể gọi writer.Flush(). Nhưng vì bạn vẫn phải đảm bảo rằng nhà văn được xử lý chỉ cần đặt nó trong một tuyên bố sử dụng như đề nghị khác.

+0

Chỉ cần gọi 'Dispose()' không giống như 'using', trừ khi' Dispose() 'nằm trong khối' finally'. –

+0

@EricJ. Vâng bạn đã đúng. –

Các vấn đề liên quan