2012-08-05 81 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; 
}