读取和写入名称值文本文件的简单方法

时间:2010-09-23 19:07:27

标签: c# .net file text

我有一些有很多领域的课程;

public class CrowdedHouse
{
  public int     value1;
  public float   value2;
  public Guid    value3;
  public string  Value4;

  // some more fields below
}

我的课程必须按以下格式(de)序列化为简单的Windows文本文件

NAME1=VALUE1
NAME2=VALUE2

在.NET中最方便的方法是什么?这是一个文本文件,所有值必须先将其转换为字符串。我们假设我已经将所有数据转换为字符串。

UPDATE一个选项是pinvoke WritePrivateProfileString / WritePrivateProfileString 但是这些都使用了我不需要使用的“[Section]”字段。

3 个答案:

答案 0 :(得分:11)

编辑:如果您已将每个数据值转换为字符串,只需使用以下方法在生成Dictionary这些值后对其进行序列化:

var dict = new Dictionary<string, string>
{
    { "value1", "value1value" },
    { "value2", "value2value" },
    // etc
}

或使用dict.Add(string key, string value)


要阅读数据,只需将=周围的每一行拆分,然后将结果存储为Dictionary<string, string>

string[] lines = File.ReadAllLines("file.ext");
var dict = lines.Select(l => l.Split('=')).ToDictionary(a => a[0], a => a[1]);

要将字典转换为文件,请使用:

string[] lines = dict.Select(kvp => kvp.Key + "=" + kvp.Value).ToArray();
File.WriteAllLines(lines);

请注意,您的NAMEVALUE不能包含=

答案 1 :(得分:4)

写作很简单:

// untested
using (var file = System.IO.File.CreateText("data.txt"))
{
   foreach(var item in data)
      file.WriteLine("{0}={1}", item.Key, item.Value);
}

阅读它:

// untested
using (var file = System.IO.File.OpenText("data.txt"))
{
   string line;
   while ((file.ReadLine()) != null)
   {
       string[] parts = line.Split('=');
       string key = parts[0];
       string value = parts[1];
       // use it
   }
}

但最好的答案可能是:使用XML。

答案 2 :(得分:4)

Comic上尉回答的小改进:

要启用= in值:(仅拆分一次)

var dict = lines.Select(l => l.Split(new[]{'='},2)).ToDictionary(a => a[0], a => a[1]);