使用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;
    }

我的代码不读取从第二行开始,它只是挂起。

使用StreamReader从文本文件中读取新行

在您的循环中,您保留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;