我一直在研究登录中心草稿(是的,我知道,我会将密码和用户名的存储转移到数据库或稍后散列)我遇到了一个问题,我的bool代码看到了用户名是否存在。检查登录用户的bool代码始终为false。 编辑:小代码片段:
bool userContain = File.ReadAllLines("C:\\Users\\Public\\Passwords.txt").Contains(loginUser);
Console.WriteLine(userContain);
if (loginUser == "")
{ Console.WriteLine("Error.... Username is empty.. stop trying to glitch the system ;("); }
else
{
if (userContain == true)
{
if (lineCount == countLine) { Console.WriteLine("Logged In!"); loginAttempt = 1; } else { Console.WriteLine("Error:Password or User incorrect!"); }
}
else { Console.WriteLine("Error, Username does not exist"); }
}
编辑:愚蠢的错字....感谢你指出它。我现在多次精神上抨击自己......
答案 0 :(得分:1)
您的版本会检查是否有一行等于用户名,当它可能只是该行的一部分时。
bool userContain = File.ReadAllLines("C:\\Users\\Public\\Passwords.txt").Any(s=>IsInLine(s,userLogin));
实施IsInLine
以匹配您的数据表示 - 例如,如果密码文件中的每一行都是格式" mechron,123",IsInLine
可以使用string.Split (',')并与第一个令牌进行比较。
此外,也许是一个案例问题。如果用户名不区分大小写,那么在比较之前最好对案例进行规范化(例如,使用ToLower()
)。