c# - 对于循环读取文件不起作用

标签 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;
}

文件有这个:

minicl55:mypass

但是这会输出:

enter image description here

这些是以下问题:

  • 字符重复很多
  • 只有“mmmmmmm”被认为是用户名的一部分,冒号之前的所有内容都应该是用户名的一部分,之后是 pass
  • : 包含在密码中,应该完全忽略它(除了告诉用户名停止和密码开始的地方)

最佳答案

第一次执行 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"。这对字符串的其余部分重复,因此 pass 看起来是 "iiiiiii"(从冒号到末尾)。

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

i 变量在内部和 for 循环中再次增加,所以下次您使用 acct[line][4],即 "c"(8 次),然后 iforeach 循环中增加 1,您将得到 acct [line][5] 7 次,即 "l"

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


您可以消除一些循环和复杂性,只需使用类似的东西:(untested)

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]));
    }
}

关于c# - 对于循环读取文件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18039613/

相关文章:

c# - 有没有办法在没有azure bot服务的情况下使用身份验证服务?

c# - 返回多个枚举值的最佳方法是什么? (Java 和 C#)

c# - 为什么我们在对象模型项目中需要 GetHashCode() 函数?

c# - 为什么自定义用户控件上的标签会触发 mouseleave 事件?

c# - 有没有办法在 C# 中向数组添加多个元素?

C# Excel 互操作 : Opening and Showing CSV file

c# - 如何以 xamarin 形式获取电话号码?

c# - 缺少空的 Web 应用程序模板

c# - 使用正则表达式在 Controller 中进行验证

c# - Foreach Razor 内部的 Foreach