【问题标题】:Simple way to read and write name value text file读取和写入名称值文本文件的简单方法
【发布时间】:2010-09-23 19:07:27
【问题描述】:

我有很多领域的课程;

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

  // some more fields below
}

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

NAME1=VALUE1
NAME2=VALUE2

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

更新 一种选择是 pinvoke WritePrivateProfileString/WritePrivateProfileString 但这些正在使用我不需要使用的必需的“[Section]”字段。

【问题讨论】:

    标签: c# .net file text


    【解决方案1】:

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

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

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


    要读取数据,只需在= 周围拆分每一行并将结果存储为Dictionary&lt;string, string&gt;

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

    请注意,您的NAMEs 和VALUEs 不能包含=

    【讨论】:

    • 这对我有用,但我必须修改编写代码,我必须在 WriteAllLines 方法中添加第二个参数。 File.WriteAllLines(@"C:\myFolder\myFile.txt", lines); 谢谢。
    【解决方案2】:

    写作很简单:

    // 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。

    【讨论】:

    • 如果 value 部分有一个 '=' 会导致问题。 . .
    • 不,值和名称部分都不包含“=”字符。
    • 也许您应该指定“数据”是什么。我假设一个 Dictionary.
    【解决方案3】:

    漫画队长答案的小幅改进:

    在值中启用 =:(只会拆分一次)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      • 2016-10-06
      • 1970-01-01
      • 2012-09-15
      相关资源
      最近更新 更多