c# - 如何将文本框的值与文本文件中存储的值匹配
问题描述
嗨,伙计们,我正在创建一个登录系统,该系统将用户帐户存储到一个文本文件中。当用户输入他们的用户名和密码时,如果用户退出,程序应检查文本文件,否则不应授予对系统的访问权限
我尝试使用 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");
}
}
解决方案
尽管您声明了一个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("...")) { ... }
。
推荐阅读
- pandas - 宜必思熊猫数据框连接
- java - Spring Integration 中的并行处理
- javascript - 使用 JSON 文件数据填充选择下拉列表
- bash - Kubernetes Helm bash 命令:bash: {"message":: command not found
- ruby-on-rails - 在 VS Code 中调试 Cucumber Ruby。错误:没有这样的文件或目录 - exec
- spring - 负载上基于 Spring Cloud Stream 内容的路由
- sql - 如何使用宏在 SAS 中获取当前月份名称和年份
- javascript - 递增/递减值函数 Localstorage
- node.js - Vue js 发布请求表单 | Vue.js 2
- javascript - JavaScript toISOString() 设置用户输入日期前一天的日期?