0

我在 C# 中搜索虚拟列表视图时遇到问题。

我现在正在做的是读取一个大的日志文件。这是我迄今为止实施的

我一次读一行文件,并记下行首的位置。将这些位置添加到列表中,并在调用 RetrieveVirtualItem 时 - 使用项目的索引和列表查找文件中的位置,然后从文件中读取该行。

所以读取文件时没有延迟。

我现在想搜索项目。这是我到目前为止所想到的,但我一直未能成功实施。

我实际上并没有搜索列表视图,但在我的文件读取过程中,我标记了特定字符串的命中位置,例如“INFO”。如果它命中,我将位置添加到列表中。

当调用 RetrieveVirtualItem 时,我只是读回了所有命中的行。

似乎通过调试 -if (line.IndexOf("INFO", StringComparison.OrdinalIgnoreCase) >= 0)没有击中任何匹配项。我不知道为什么,有人帮忙吗?

using (var sr = new myStreamReader("test.log"))
{
    while ((line = sr.ReadLine()) != null)
    {
        if (line.IndexOf("INFO", StringComparison.OrdinalIgnoreCase) >= 0)
        {
            position = sr.BytesRead;
            Search.Add(position);
            searchcount++;
        }
    }
    newMessageView.VirtualListSize = searchcount;
}
4

1 回答 1

2

我不知道您的“myScreamReader”类是如何工作的,但如果它类似于 StreamReader,则此代码可能对您有用:

using (var sr = new StreamReader("test.log"))
{
    while (!sr.EndOfStream)
    {
        string line = sr.ReadLine();
        if (line.IndexOf("INFO", StringComparison.OrdinalIgnoreCase) >= 0)
        {
            // line contains "info"
        }
    }
}

您应该通过在 line.IndexOf... 处设置断点来调试代码,检查 line 的值是否正在更改并且看起来正确。

于 2012-10-10T19:26:09.633 回答