0

C# で仮想リストビューを検索するのに問題があります。

私が今行っているのは、大きなログ ファイルの読み取りです。ここに私がこれまでに実装したものがあります

一度に 1 行ずつファイルを読み取り、行の開始位置に注意します。これらの位置をリストに追加し、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... にブレークポイントを設定してコードをデバッグする必要があります。

于 2012-10-10T19:26:09.633 に答える