StreamReader无法读取第二行

问题描述

我正在使用StreamReader来从.csv文件中读出用户名和密码(我只是尝试这样做,因为我是C#的新手)。由于某些原因,如果我按登录,则该帐户适用于文件第一行中的帐户,但不适用于第二行中的帐户。有人可以帮忙吗?

注册码(写作者):

try
{
    using (StreamWriter sw = new StreamWriter("C:\\GameLauncherKarakurt\\users.csv",true))
    {
        sw.WriteLine(tbxUsername.Text + ';' + tbxPassword.Text);
        sw.Close();
    }
}
catch
{
    // Do nothing
}

登录代码(阅读器):

string username;
string password;

bool usernameCorrect = false;
bool passwordCorrect = false;

// Username
try
{
    using (StreamReader sr = new StreamReader("C:\\GameLauncherKarakurt\\users.csv"))
    {
        username = sr.ReadLine();

        string[] usernameSplit = username.Split(';');
        string user = usernameSplit[0];

        while (username != null)
        {
            if (tbxUsername.Text == user)
            {
                usernameCorrect = true;

                break;
            }
            else
            {
                username = sr.ReadLine();
            }
        }
        sr.Close();
    }
}
catch
{
}

// Password
try
{
    using (StreamReader sr = new StreamReader("C:\\GameLauncherKarakurt\\users.csv"))
    {
        password = sr.ReadLine();

        string[] passwordSplit = password.Split(';');
        string pass = passwordSplit[1];

        while (password != null)
        {
            if (tbxPassword.Text == pass)
            {
                passwordCorrect = true;

                break;
            }
            else
            {
                password = sr.ReadLine();
            }
        }
        sr.Close();
    }
}
catch
{
}

if (usernameCorrect == true && passwordCorrect == true)
{
    pnlMenu.Visible = true;

    tbxUsername.Clear();
    tbxPassword.Clear();
}

解决方法

您未保留CSV文件的结构。
所有用户名和密码对都必须用逗号(“,”)而不是换行,
在每个用户和密码对之后添加一个逗号。
使用Write()而不是WriteLine()

private void Write()
{
    try
    {
        using (StreamWriter sw = new StreamWriter("C:\\GameLauncherKarakurt\\users.csv",true))
        {
            // next time you add user and pass word you need to concatenate with ","
            sw.Write(tbxUsername.Text + ';' + tbxPassword.Text + ",");           
            sw.Close();
        }
    }
    catch()
    {
        // Do nothing
    }
}

这是读取文件的一种方法。
使用ReadToEnd()并将所有用户和密码对分割为一个数组,每个对将位于不同的索引:

using (StreamReader sr = new StreamReader("C:\\GameLauncherKarakurt\\users.csv"))
{
    var rows = sr.ReadToEnd();
    string[] splitted = rows.Split(',');

}

现在,您可以通过“;”再次拆分数组的每个索引。分隔符,
请记住,您可以对“匹配” /身份验证逻辑进行一些改进。

,

创建文件后,可以使用以下语句从每一行读取用户和密码:

using (StreamReader sr = new StreamReader(""C:\\GameLauncherKarakurt\\users.csv""))
{
    while (!sr.EndOfStream)
    {
        strLine = sr.ReadLine();
        string[] usernameSplit = strLine.Split(';');
        string user = usernameSplit[0];
        string password = usernameSplit[1];
    }
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...