首页 > 解决方案 > 如何将文本框的值与文本文件中存储的值匹配

问题描述

嗨,伙计们,我正在创建一个登录系统,该系统将用户帐户存储到一个文本文件中。当用户输入他们的用户名和密码时,如果用户退出,程序应检查文本文件,否则不应授予对系统的访问权限

我尝试使用 StreamReader 访问路径文件以匹配值但无济于事

private void loginButton_Click(object sender, EventArgs e){

String user = usernameText.Text;
String pass = passText.Text;

StreamReader read = new StreamReader(@"profiles.txt");

 if(user.Contains(File.ReadLines(@"profiles.txt").ToString()) && pass.Contains(File.ReadLines(@"profiles.txt").ToString()))
  {
      login.Show();
  }
  else
  {
       MessageBox.Show("The username or Password is Incorrect"); 
   }
}

标签: c#

解决方案


尽管您声明了一个StreamReader变量,但您从未使用过它。您选择了File.ReadLines()静态方法。但是,您正在检查用户和密码字符串是否都包含文件中的所有行:user.Contains(File.ReadLines(@"profiles.txt").ToString()). 此外,调用ToString()不会返回文件中的行,而是返回的IEnumerable 对象File.ReadLines()的字符串表示形式。

为了建议另一种方法,我将假设以下内容:文件的每一行对应一个用户和一个密码,不能有多个用户具有相同的用户名和密码,User已按照bolkay的建议构建了一个类在评论中。

User user = null;
string line;
while ((line = read.ReadLine()) != null)
{
   if (line.Contains(user) && line.Contains(password))
   {
      login.Show();
      user = new User() { Username = user, Password = password };
      break;
   }
}
if (user == null) MessageBox.Show("The username or Password is Incorrect"); 

如果要使用File.ReadLines(),请使用 foreach 而不是 while: foreach (string line in File.ReadLines("...")) { ... }


推荐阅读