gpt4 book ai didi

c#.net 错误通过枚举器循环

转载 作者:行者123 更新时间:2023-11-30 17:21:30 25 4
gpt4 key购买 nike

我创建了一个显示服务器终端服务 session ID 和用户名的 .bat 文件。我在数据网格中显示信息

这是 .bat 文件的输出:

C:\Documents and Settings\adcock>qwinsta /server:ilsap01 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE console                                     0  Conn    wdcon rdp-tcp                                 65536  Listen  rdpwd                   Jrodriguez               27  Disc    rdpwd                   pbahena                   8  Disc    rdpwd                   tfurr                     3  Disc    rdpwd rdp-tcp#2187      kchild                   14  Active  rdpwd                   Trhodes                  10  Disc    rdpwd                   ajordan                  16  Disc    rdpwd                   Trhodes                  11  Disc    rdpwd rdp-tcp#2191      rluna                    15  Active  rdpwd rdp-tcp#2192      lcathey                  17  Active  rdpwd

the only information i want to display is the SessionID and Username that works somewhat with the code below.

protected void Button1_Click(object sender, EventArgs e)
{
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(@"C:\listfiles.bat");
psi.RedirectStandardOutput = true;
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
psi.UseShellExecute = false;
System.Diagnostics.Process listFiles;
listFiles = System.Diagnostics.Process.Start(psi);
System.IO.StreamReader rawUserData = listFiles.StandardOutput;
listFiles.WaitForExit(30000);
try
{

DataTable table2 = new DataTable();
table2.Columns.Add(new DataColumn("UserName", typeof(string)));
table2.Columns.Add(new DataColumn("SessionId", typeof(string)));

String myString = rawUserData.ReadToEnd();
string exp = @"([\w_]+)"; ;


MatchCollection matches = Regex.Matches(myString, exp,RegexOptions.IgnoreCase);

IEnumerator en = matches.GetEnumerator();

while (en.MoveNext())
{
Match match = (Match)en.Current;

if (en.Current.ToString() == "rdpwd")
{
en.MoveNext();

Match match_Item = (Match)en.Current;

string item = match_Item.Value;

en.MoveNext();

Match match_Item2 = (Match)en.Current;

string item2 = match_Item2.Value;

DataRow row = table2.NewRow();
row[0] = item.Split()[0];
row[1] = item2.Split()[0];
//row[1] = item.Split(',')[1];
table2.Rows.Add(row);

//en.MoveNext();
//break;

}


}

this.displayUsers.DataSource = table2;
this.displayUsers.DataBind();
}

catch (Exception ex)
{
Response.Write(ex);
}

我得到的错误是:枚举尚未开始或已经完成。

我设置了一个断点,它接缝 while 循环完成但重新开始,在它添加了几个重复记录后它抛出了错误。关于造成这种情况的任何想法。我认为这是我的 RegEx

最佳答案

您在循环内两次调用 MoveNext。这是导致问题的原因。

当你在最后一行时,你调用 MoveNext,它找到“rdpwd”,然后它调用 MoveNext 一次,然后再次调用它,这就是枚举器无效的时候。在 then last MoveNext 中,它中断了,因为它已经在末尾了。

关于c#.net 错误通过枚举器循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3388177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com