2010-06-18 39 views
20

Tôi có một đối tượng từ điển kiểu Từ điểnCách viết nội dung của từ điển vào một tệp văn bản?

và cố gắng sử dụng StreamWriter để xuất toàn bộ nội dung sang tệp văn bản nhưng không tìm được phương thức chính xác từ lớp Từ điển.

using (StreamWriter sw = new StreamWriter("myfile.txt")) 
     { 
      sw.WriteLine(dictionary.First()); 

     } 

Tôi chỉ có thể lấy phần tử đầu tiên và nó được bao bọc bởi một khung vuông cộng với một tách dấu phẩy ở giữa cũng như:

[Peter, Admin]

và sẽ được tốt đẹp để có [Peter Admin] (không có dấu phẩy)

Trả lời

24

Bạn cần để lặp qua các mục mình:

using (StreamWriter file = new StreamWriter("myfile.txt")) 
    foreach (var entry in dictionary) 
     file.WriteLine("[{0} {1}]", entry.Key, entry.Value); 
+0

Cảm ơn, đồng nghiệp của tôi đã chỉ ra tôi có thể làm một cái gì đó giống như ... foreach (KeyValuePair mục trong từ điển) sw.WriteLine (entry.Key + entry.Value); – Chris

0

Bạn cần phải chọn các chuỗi bạn muốn viết, và lặp qua các liệt kê kết quả để viết từng dòng:

var dataToWrite = from kvp in dictionary 
        select String.Format("[{0} {1}"], kvp.Key kvp.Value); 

using (StreamWriter sw = new StreamWriter("myfile.txt")) 
{ 
    foreach (string dataLine in dataToWrite) 
    { 
     sw.WriteLine(dataLine); 
    } 
} 
2
foreach (KeyValuePair<string,string> kvp in dictionary) 
{ 
    System.IO.File.AppendAllText("dictionary.txt", string.Format("{0} {1} {2}", kvp.Key, kvp.Value, Environment.NewLine)); 
} 
+0

+1 vì tôi đang viết lại các phương thức lấy Danh sách để lấy từ điển thay vào đó và tôi thực sự muốn tiếp tục sử dụng các phương thức lớp tĩnh 'File'. Nhưng sau đó tôi nhận ra rằng điều này sẽ mở ra và đóng tập tin mỗi lần lặp lại, mà có lẽ không phải là một ý tưởng hay. – skwear

0
var pairs = from p in yourDictionary.Keys 
    select new {Key=p, Value=yourDictionary[p]}; 

foreach(var pair in pairs) 
    yourStreamWriter.WriteLine("Key={0}, Value={1}", pair.Key, pair.Value); 
29
File.WriteAllLines("myfile.txt", 
    dictionary.Select(x => "[" + x.Key + " " + x.Value + "]").ToArray()); 

(Và nếu bạn đang sử dụng .NET4 sau đó bạn có thể bỏ qua trận chung kết ToArray gọi.)

+4

Tôi thích một giải pháp dòng! –

+1

Tôi cũng khuyên bạn nên làm cho nó một phương pháp mở rộng. –

+1

csv style: File.WriteAllLines ("myfile.txt", dictionary.Select (s => String.Format ("{0}; {1}", s.Key, s.Value))); –

1
File.WriteAllLines("myfile.txt",dictionary.Select(s=>s.ToString()); 

nên làm điều đó như chức năng ToString cho các phần tử điển được định nghĩa để đưa từng elem theo định dạng sau trong tệp văn bản.

[key1,Value1] 
[key2,Value2] 
. 
. 
+0

Ở trên làm cho nó dễ dàng hơn để mở tập tin sau này trong excel và bạn sẽ có khóa và giá trị tách ra nếu bạn sử dụng "myfile.csv" thay vì "myfile.txt" – ambassallo

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