2015-10-16 167 views
-3

我不是100%确定如何解释这个标题或如何搜索它,所以很抱歉,如果这已经发布之前。我正在试图做的是读取和写入文件,例如我会做:写入/读取文本文件(C#)

WriteToFile(key + "=" + value); 

,并在文本文件,它会这样说:

AKEY =安勤

我能够很容易地得到,但我很奇怪,我究竟能够如何获得代码来找到'key'并返回它的值。例如:

int integer = GetValue("AKey"); 

和getValue会找到“钥匙”,“AKEY”,如果该文件中存在,返回值的方法。

+0

首先,读取所有行,然后对每行使用=符号分割字符串,这会给你两个字符串。将这些字符串存储在一个'Dictionary '中,然后可以执行像'myDictionary [“AKey”]''的操作。 –

+0

由于您以自定义格式存储数据,因此您需要编写自定义分析器来从该格式读取数据。 – David

+0

@Sam说如果我有一个代码说'保存(“myNumber”,1);'所以这将是'保存(字符串名,int数);'这将保存到一个文本文件为** myNumber = 1 **。然后我有另一个获取_myNumber_的值的方法,它会是这样的:'Get(“myNumber”)'('Get(string name)')并且在这种情况下返回值1。 – superhb

回答

0

有关完整的烦躁的缘故,我会在我的评论扩大,这里是你将如何做到这一点的一些示例代码:

Dictionary<string, string> _keys = new Dictionary<string, string>(); 

private void ReadInKeyFile(string keyFileName) 
{ 
    _keys.Clear(); 

    string[] lines = System.IO.File.ReadAllLines(keyFileName); 

    foreach (string line in lines) 
    { 
     string[] keyval = line.Split('='); 
     _keys.Add(keyval[0], keyval[1]); 
    } 
} 

private string GetValue(string key) 
{ 
    string retVal = string.Empty; 
    _keys.TryGetValue(key, out retVal); 
    return retVal; 
} 

Dictionary<string, string>认为是读取键/值对从文件中输入,所以当你想刷新它时,你可以用文件名称调用ReadInKeyFile函数。然后,您可以使用GetValue来获取特定密钥的值(如果找不到密钥,则可以使用String.Empty)。

有一些明显的检查,我在上面的代码中缺少(文件不存在,行不包含=等),但它会让你90%的方式。

编辑

下面是一些扩展,将新的钥匙和写出来的文件:

private void SaveKeysToFile(string keyFileName) 
{ 
    StringBuilder sb = new StringBuilder(); 
    _keys.ToList().ForEach(kvp => 
     sb.AppendLine(string.Format("{0}={1}", kvp.Key, kvp.Value))); 
    System.IO.File.WriteAllText(keyFileName, sb.ToString()); 
} 

private void AddValue(string key, string value) 
{ 
    _keys[key] = value; 
} 

SaveToFile方法可转换字典您使用的文件格式, AddValue添加一个键和值(或者如果它已经存在,则更改现有的键)。

+0

小心;如果'kvp.Value'包含'=',这将不起作用; –

+0

@DourHighArch是的,当然,它将不得不逃脱,但再一次,这是我离开OP的10%的一部分。它会“起作用”(如同不会中断),但会产生意想不到的结果。如果密钥也包含=标记,它也有相同的问题。 –

+0

所以我重新创建了你在这里完成的测试。它似乎并没有写入文件。你知道可能会造成这种情况吗? – superhb