プロが教えるわが家の防犯対策術!

イベントビューアから指定のログを取得したいのですが
下記のerがなぜかnullになります。eReaderにはしっかりEventLogReaderも入っています。
ー環境ー
VS2013 C# .net

string section = "System";
//Systemイベントを指定する
string queryString = "";
using (StreamReader sr = new StreamReader("readme.xml", Encoding.GetEncoding("Shift_JIS")))
{
queryString = sr.ReadToEnd();
}

//上記の条件でEventLogQueryを初期化し、EventLogReaderを介して、EventRecordを読み込みます。
EventLogQuery eQuery = new EventLogQuery(section, PathType.LogName, queryString);
EventLogReader eReader = new EventLogReader(eQuery);
EventRecord er = eReader.ReadEvent();

質問者からの補足コメント

  • うーん・・・

    言い忘れましたが
    なぜnullになってしまうのか
    考えられる原因を知りたいのです。
    わかる方いらっしゃいましたらご回答お願いします。

    『オブジェクトの現在の状態に問題があるため、操作は有効ではありません。』
    とエラーを吐かれているのが現状であり、その原因が上記のことにあるのではと
    考えています。

      補足日時:2015/07/13 10:58

A 回答 (1件)

EventLogReader.ReadEventメソッドのマニュアル


https://msdn.microsoft.com/ja-jp/library/bb36089 …
には特に明記されていませんが
> このクラスを使用するコード例については、「How To: Query for Events」を参照してください。
の「How To: Query for Events」にあるサンプルコードを読むと
「ReadEventがnullを返すまでループを繰り返す」
というアルゴリズムになっています。

そこから予想するに
> このオブジェクト内のイベント クエリから返される次のイベントを読み取ります。
> 戻り値
> 型: System.Diagnostics.Eventing.Reader.EventRecord
> EventRecord オブジェクトを返します。


「次のイベントが読み取れない場合は、nullを返します」
が抜けていると考えてよいでしょう。



> EventRecord er = eReader.ReadEvent();

で代入していますが「 eReader.ReadEvent()」がnullを返すケースもある、ということです。

queryStringが期待したものになっていない、とかがあるのではないでしょうか
    • good
    • 0
この回答へのお礼

助かりました

そうだったのですか!!
そのような気もしてきていたところでしたので腑に落ちました。
いつもご回答ありがとうございます。
kmee様の知見の広さには驚かされるばかりですが、やはり地道に勉強していくしかないのでしょうね。

お礼日時:2015/07/13 21:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!