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