2015-10-16 204 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