2010-09-23 35 views
3

我有一些有很多字段的类;读取和写入名称值文本文件的简单方法

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

    // some more fields below 
} 

我classmust是(德)序列化为简单的Windows的文本文件的格式如下

NAME1=VALUE1 
NAME2=VALUE2 

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

更新一个选项将pinvoke WritePrivateProfileString/WritePrivateProfileString 但这些使用所需的“[部分]”字段,我不需要使用。

回答

10

编辑:如果您已经转换的各数据值的字符串,只需使用下面的方法使这些值的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); 

请注意,您的NAME s和VALUE s不能包含=

+0

这对我有效,但我不得不修改编写代码,我不得不向WriteAllLines方法添加第二个参数。 'File.WriteAllLines(@“C:\ myFolder \ myFile.txt”,行);'谢谢。 – 2017-10-26 00:27:03

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。

+0

无法使用XML,文件格式是由第三方确定。 – 2010-09-23 19:26:52

+2

如果值部分中包含'=',会导致问题。 。 。 – 2010-09-23 19:28:21

+0

不能,值和名称部分都不包含'='字符。 – 2010-09-23 19:34:05

3

队长漫画答案的小改进:

要启用值=(会分裂一次)

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