如何将字典内容写入文本文件?

31
我有一个类型为Dictionary的字典对象,想要使用StreamWriter将整个内容输出到文本文件,但无法从Dictionary类中找到正确的方法。
using (StreamWriter sw = new StreamWriter("myfile.txt"))
        {
            sw.WriteLine(dictionary.First());

        }

我只能获取第一个元素,它被方括号包围,并且在中间用逗号分隔:

[Peter, Admin]

如果能得到 [Peter Admin](没有逗号)就好了。

7个回答

46
File.WriteAllLines("myfile.txt",
    dictionary.Select(x => "[" + x.Key + " " + x.Value + "]").ToArray());

(如果您使用的是.NET4,则可以省略最后的ToArray调用。)


1
我建议将其制作为扩展方法。 - Dan Csharpster
1
File.WriteAllLines("myfile.txt", dictionary.Select(s => String.Format("{0};{1}", s.Key, s.Value))); -> File.WriteAllLines("myfile.txt", dictionary.Select(s => String.Format("{0};{1}", s.Key, s.Value))); - Pažout

41
你需要自己遍历条目:

你需要自己循环遍历条目:

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

谢谢,我的同事指出我可以这样做...foreach(KeyValuePair<string, string> entry in dictionary) sw.WriteLine(entry.Key + entry.Value); - Chris

4
// Demonstration
private void WriteDictToFile(Dictionary<string, string> someDict, string path) 
{
    using (StreamWriter fileWriter = new StreamWriter(path)
    {
        // You can modify <string, string> notation by placing your types.
        foreach (KeyValuePair<string, string> kvPair in someDict) 
        {
            fileWriter.WriteLine("{0}: {1}", kvPair.Key, kvPair.Value);
        }
        fileWriter.Close();
    }
}

在主函数中使用

static void Main(string[] args) 
{
    Dictionary<string, string> dataDict = new Dictionary<string, string>();
    Console.Write("Enter your name: ");
    string n = Console.ReadLine();
    Console.Write("Enter your surname: ");
    string s = Console.ReadLine();
    dataDict.Add("Name", n)
    dataDict.Add("Surname", s)
    WriteDictToFile(dataDict, "PATH\\TO\\FILE");
}

4
foreach (KeyValuePair<string,string>  kvp in dictionary)
{
     System.IO.File.AppendAllText("dictionary.txt", string.Format("{0} {1} {2}", kvp.Key,    kvp.Value, Environment.NewLine));
}

我要对接收列表的方法进行重写,改为接收字典,所以我很想继续使用静态File类的方法,因此我点了一个赞。但后来我意识到这样会在每次迭代时打开和关闭文件,这可能不是一个好主意。 - skwear

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

应该这样做,因为字典元素的ToString函数被定义为将每个元素放在以下格式中的文本文件中。
[key1,Value1]
[key2,Value2]
.
.

以上方法可以让你更容易地在 Excel 中打开文件,如果你使用 "myfile.csv" 而不是 "myfile.txt",你将会获得键和值的分离。 - ambassallo

2
你需要选择要写入的字符串,并迭代遍历结果以写入每一行:
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);
    }
}

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接