2012-08-05 83 views
0

我有一個小項目。我正在做的是從用戶那裏獲取輸入並將其保存在文本文件中。它的工作很好。從文本文件檢索數據

private void btbsave_Click(object sender, EventArgs e) 
{ 
    //Create Directory 
    DirectoryInfo dd = new DirectoryInfo("C://Program Files/UserInfo"); 
    dd.Create(); 
    //To save the inputs 
    StreamWriter sw = new StreamWriter("C://Program Files/UserInfo/UserInfo.txt", true); 
    sw.WriteLine(txtname.Text); 
    sw.WriteLine(txtage.Text); 
    sw.Flush(); 
    sw.Close(); 
    //Conformation 
    MessageBox.Show("Credentials Saved"); 
    //To Clear the text box after data saved 
    txtname.Text = string.Empty; 
    txtage.Text = string.Empty; 
    //Focus 
    txturl.Focus(); 
} 

現在,我想根據輸入檢索數據。這部分對我來說很難,你們可以幫我嗎?

private void btnsearch_Click(object sender, EventArgs e) 
{ 
    StreamReader sr = new StreamReader("C://Program Files/UserInfo/UserInfo.txt"); 
    String mystring = sr.ReadToEnd(); 
    //No idea how to retrive now plz help! 
} 

我的項目簡介: 花一些值從用戶喜歡用戶名年齡。將它們保存在文本文件中。

我需要檢索基於用戶的值用戶名。然後我應該得到用戶名以及他的年齡並將這些值插入到2個不同的只讀文本框中。

+0

什麼路徑語法這是「 」C://程序文件/的UserInfo「'基於?以前從未見過這樣的事情。 – 2012-08-05 12:40:06

+3

你是什麼意思「不知道如何現在回收」?該文件的內容是'mystring',你還需要什麼嗎? – dasblinkenlight 2012-08-05 12:42:59

+0

你好,爲什麼不使用xml文件來存儲用戶信息,文本文件是不是有用做到這一點 – 2012-08-05 12:54:52

回答

2

個人而言,我建議你重新考慮你的方法,但是,這裏就是你要找的內容:

string sUserToSearch = "username"; 
    string sAgeToSearch = "22"; 

    string[] readText = File.ReadAllLines("UserInfo.txt"); 
    for (int i = 0; i < readText.count-2; i++) { 
     if(readText[i] == sUserToSearch && readText[i+1] == sAgeToSearch); 
      // Found it! 
    } 

我不知道你想做什麼,但如果我有你正確的,你應該多看關於Serialization

+0

你好,你有權利,但這是一個不好的做法,所以它是一個好的做法,對一個不好的做法的答案? – 2012-08-05 12:49:31

1

首先,你必須在一次單獨的數據,將它們插入到你的文本文件

private void WriteUserToFile(User user, string path) 
{ 
    using(var sw = new StreamWriter(path, true)) 
    { 
     sw.WriteLine(user.Name + ";" + user.Age); 
    } 
} 

現在你有這樣的文件:

User1;10 
User2;20 
User3;45 

現在你要分割你的數據的可能性:

private IEnumerable<User> ReadUsersFromTextFile(string path) 
{ 
    var users = new List<User>(); 

    using(var sr = new StringReader(path) 
    { 
     do 
     { 
      var strings = sr.ReadLine().split(';');     
      var user = new User(); 
      user.Name = strings[0]; 
      user.Age = strings[1]; 
      users.Add(user); 
     }while(!sr.EndOfStream) 
    } 

    return users; 
}