Linq模式匹配问题

时间:2011-07-06 16:47:13

标签: c# linq

下面的代码搜索文件以查看模式是否匹配并将文件偏移量存储在“result”变量中。然后我有一个for循环通过'result'变量来循环显示工作正常的偏移...直到,我还有一些代码来读取每个偏移量的文件内容,并对每个读入和在控制台中输出它。

由于某种原因,每个循环只输出第一个计算,而不是继续执行所有其他偏移。

为什么每个循环在第一个偏移处停止的任何帮助?

提前致谢

 byte[] pattern = 00 00 00 08 00;
 byte[] file = "C:\\123.cfg";

 var result = Enumerable.Range(0, file.Length - pattern.Length + 1)
                   .Where(i => pattern.Select((b, j) => new { j, b })
                                      .All(p => file[i + p.j] == p.b))
                   .Select(i => i + pattern.Length - 1);


foreach (var value in result) {

    int startaddress1 = value + 1;
    int EndAddress1 = value + 4;

    int startaddress2 = EndAddressLong + 1;
    int EndAddress2 = EndAddressLong + 4;

    MyGlobals.123_filepath = "C:\\123.cfg";

    ///////////////////////////// Read in the selected //////////////

    BinaryReader br = new BinaryReader(File.OpenRead(MyGlobals.123_filepath),  
    System.Text.Encoding.BigEndianUnicode);

    for (int i = startaddress1; i <= EndAddress2; i++)
    {
        br.BaseStream.Position = i;
        MyGlobals.Hexbytes += br.ReadByte().ToString("X2") + ",";
    }


}

2 个答案:

答案 0 :(得分:2)

我认为您的问题出在Console.ReadKey(),您需要按一个键才能继续foreach循环

答案 1 :(得分:0)

只有一个原因可能导致循环在一次迭代后退出:

  • 结果只有一个值