C#listview搜索虚拟模式

时间:2012-10-10 18:54:00

标签: c#

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

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

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

因此读取文件时没有延迟。

我想现在搜索商品。这是我到目前为止所想到的,但我还没有成功实现它。

我实际上并没有在listview中搜索,但在我的文件阅读过程中,我标记了特定字符串命中的位置,比如说“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;
}

1 个答案:

答案 0 :(得分: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设置断点来调试代码...检查行的值是否在变化并且看起来是否正确。