对于循环读取,文件不起作用

Min*_*l55 2 c#

我有这个:

private void getAccount()
{
    string[] acct = File.ReadAllLines(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\Accts.txt");
    for (int i = 0; i < acct[line].Length - 1; i++)
    {
        foreach (char c in acct[line])
        {
            if (c.ToString() == ":")
            {
                onPass = true;
                i += 1;
            }
            if (onPass == false) { user += acct[line][i]; }
            if (onPass == true) { pass += acct[line][i]; }
        }
    }
    MessageBox.Show("Username is " + user + ". \n\nPassword is " + pass + ".");
    onPass = false;
}
Run Code Online (Sandbox Code Playgroud)

该文件包含:

minicl55:mypass
Run Code Online (Sandbox Code Playgroud)

然而,这输出:

在此输入图像描述

这些是以下问题:

  • 人物重复了很多次
  • 只有"mmmmmmm"被认为是用户名的一部分,直到冒号后的所有内容都应该是用户名的一部分,之后通过
  • :包含在密码中,应该完全忽略(除了告诉用户名停止的位置和密码开始)

Gra*_*ICA 5

你第一次经历你的for循环,i == 0.然后foreach循环查看每个字符acct[line],但从i不更改,因此对于之前的所有字符:,该acct[line][i]部分保持返回acct[line][0],或"m"8次.这就是用户名似乎的原因"mmmmmmmm".

然后遇到冒号并且i增加1.现在onPass == true,pass结束了acct[line][1],这就是角色"i".这将重复其余的字符串,因此传递似乎是"iiiiiii"(从冒号到结尾).

现在我们回到for循环中.除了i已经增加了1 循环(坏主意),所以现在for环实际上是对i == 2.开始部分再次执行8次(用户名中的每个字符一次),但始终引用acct[line][2],因此用户名是"nnnnnnnn".除了onPass仍然是,所以它被附加到密码变量.然后你得到7个"i"年代后i增加.

i变量在内部,并在增加for再次循环,所以接下来你使用的时间acct[line][4],这是"c"(8次),然后i在内侧增加了1 foreach圈,你会得到acct[line][5]7倍,这是"l".

到目前为止,密码是"iiiiiiinnnnnnnniiiiiiicccccccclllllll".希望你能看到模式.


你可以消除一些循环和复杂性,并使用类似的东西:( 未经测试)

private void getAccount()
{
    var allAccounts = File.ReadAllLines(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\Accts.txt");

    foreach (var account in allAccounts)
    {
        var pieces = account.Split(':');

        MessageBox.Show(string.Format("Username is {0}. \n\nPassword is {1}.", pieces[0], pieces[1]));
    }
}
Run Code Online (Sandbox Code Playgroud)