使用StreamReader从文本文件中读取新行
本文关键字:读取 新行 文件 文本 StreamReader 使用 | 更新日期: 2023-09-27 18:06:35
我在文件中存储的是与帐户相关的值。(只是测试,不会用于商业用途)。我需要的是绘制用户名和密码的值,通过遍历每一行,但是.peek()似乎不适合我。我做错了什么?我的block看起来是这样的:
public string CheckAccount(string username, string password)
{
StreamReader sr;
string filename = "H:''AccountInfo.txt";
string s;
string result = "";
sr = File.OpenText(filename);
s = sr.ReadLine();
string usernameFromText;
string passwordFromText;
while (sr.Peek() >= 0)
{
usernameFromText = (s.Split(','))[0];
passwordFromText = (s.Split(','))[2];
if (username == usernameFromText && password == passwordFromText)
{
result = "Successfully Logged in!";
}
else if (username != usernameFromText || password != passwordFromText)
{
result = "Your Username / Password is Invalid!";
}
}
sr.Close();
return result;
}
我的代码不读取从第二行开始,它只是挂起。
在您的循环中,您保留Peek
而不是调用ReadLine
。
不清楚你为什么要使用sr.Peek
…并且永远不会从文件中读取第二行。在第一个ReadLine
之后,您从来没有真正移动文件的"光标"—您只是反复地窥视同一个字符。如果你正在使用。net 4,最简单的方法是使用File.ReadLines
:
foreach (string line in File.ReadLines(filename))
{
string usernameFromText = (line.Split(','))[0];
string passwordFromText = (line.Split(','))[2];
if (username == usernameFromText && password == passwordFromText)
{
return "Successfully Logged in!";
}
}
return "Your Username / Password is Invalid!";
如果你使用的是。net 3.5并且文件不是太大,你可以用File.ReadAllLines
来读取整个文件…或者还有其他方法可以一次读取一行。
请注意,我已经将逻辑更改为我怀疑更接近您真正想要的东西-即如果任何行匹配,结果是成功,否则失败。
还要注意,在原始代码中,如果在循环中抛出异常,您不会关闭阅读器-您应该使用using
语句来避免这种情况。
另一个选项是使用LINQ:
var query = from line in File.ReadLines()
let split = line.Split(',')
select new { user = split[0], password = split[2] };
return query.Any(x => x.user == username && x.password == password) ?
"Successfully Logged in!" : "Your Username / Password is Invalid!";
使用File更简单。ReadLines并将文件中的所有行读入字符串数组,如下所示:
string[] lines = File.ReadLines("H:''AccountInfo.txt");
foreach(string oneLine in lines)
{
/// do something with line
}
string result;
StreamReader SR;
string S;
SR=File.OpenText("H:''Account.txt");
S=SR.ReadToEnd();
SR.Close();
string words = S;
words = words.Replace("'r", string.Empty);
List<string> splitNewLine = words.Split(''n').ToList();
for (int i = 0; i <= splitNewLine.Count() - 1; i++)
{
string checkUsername = (splitNewLine[i].Split(','))[0];
string checkPassword = (splitNewLine[i].Split(','))[2];
if (Username == checkUsername && Password == checkPassword)
{
result = "Successfully logged in";
return result;
break;
}
}
result = "Wrong Login Combination";
return result;