• ベストアンサー

Windowsファイアウォールのログファイルを開くには?

Visual Studio 2005でWindowsファイアウォールのログファイルを開こうと思ったのですが、 『System.IO.IOException はユーザー コードによってハンドルされませんでした。 Message="別のプロセスで使用されているため、プロセスはファイル 'C:\WINDOWS\pfirewall.log' にアクセスできません。"』 のようなエラーとなり、開けませんでした。 メモ帳などでは開ける(上書き保存はできませんが)ので、読み取り専用でなら開けるような気がするのですが、書き込みのロックがかかっているファイルを開くことはできるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

間が空いちゃってすみません。 例外を引き起こしている直接の原因が知りたかったので、例外のネストの中の > 場所 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) のFileMode mode, FileAceess access, Int32 rigths, FileShare share 等の値を知りたいのですがとれないですかねえ? C++の例外ならまだわかるんですが、.NETはまだそんなに使い込んでいないので。 でもaccessとmodeは自分で指定した値が入っていそうですよね。 あと例外の種類は UnauthorizedAccessException でしょうか? 多分これは GetType().Nameで取れるのではないかと思います。 はなはだ.NETらしくないのですが、FileOpen関数で読み取り専用を指定しても 大丈夫なような気がします。

参考URL:
http://msdn.microsoft.com/library/ja/vblr7/html/vastmOpen.asp?frame=true
yossy3
質問者

補足

System.IO.FileStream.Init()の中を調べる方法が分からなかったので、例外の直接の原因は分からなかったのですが、 (System.IO.ExceptionとUnauthorizedAccessException は親子関係のあるクラスじゃないですよね?) FileOpen(1, "C:\WINDOWS\pfirewall.log", OpenMode.Input, OpenAccess.Read, OpenShare.Shared) で、開くことができたのでもう少し調べてみたところ fs = New System.IO.FileStream("C:\WINDOWS\pfirewall.log", IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.ReadWrite) で、うまくいきました。 どうやら、FileShare.ReadWriteを指定して、明示的に後続のファイルに読み取りと書き込みの許可を与えないといけないみたいですね。 参考: http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=36448&forum=7&3 回答が大変参考になりました。ありがとうございました。

その他の回答 (3)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

うーんメモ帳では開けるんですよね? 申し訳ありませんが、例外のもう少し詳しい情報を補足してもらえますか? 参考URLの ' Catch the IOException generated if the ' specified part of the file is locked. Catch ex As IOException Console.WriteLine( _ "{0}: The write operation could " & _ "not be performed because the " & _ "specified part of the file is " & _ "locked.", ex.GetType().Name) End Try この辺を参考に、GetType()とToString() あたりの情報をお願いします。 あと、コマンドプロンプトを開いてWindowsディレクトリに移動して type pfirewall.log > NUL か copy pfirewall.log NUL とするとどうなりますか?

参考URL:
http://msdn2.microsoft.com/ja-jp/library/system.io.ioexception(VS.80).aspx
yossy3
質問者

補足

度々、申し訳ありません。 ToString()の結果は --ここから-- "System.IO.IOException: 別のプロセスで使用されているため、プロセスはファイル 'C:\WINDOWS\pfirewall.log' にアクセスできません。 場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 場所 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) 場所 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access) 場所 WindowsApplication1.Form1.Form1_Load(Object sender, EventArgs e) 場所 C:\Temporary Projects\WindowsApplication1\Form1.vb:行 6" --ここまで-- GetType()のほうはいろんなプロパティを含んでいますが どのあたりの情報が必要でしょうか? type pfirewall.log > NUL copy pfirewall.log NUL は、特にエラーは表示されませんでした。 ちなみに、VBの方でもFile.Copy()メソッドでコピーすることはできました。 コピーはできるのでとりあえず中身を調べるだけなら一時ファイルにコピーすれば中身を見られそうですね。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

.NETのストリームはよくわからないのですが、 File.OpenText とかを使っても同じ結果になりますか?

参考URL:
http://msdn2.microsoft.com/ja-jp/library/db5x7c0d(VS.80).aspx
yossy3
質問者

補足

回答ありがとうございます。 下記のような方法でOpenTextを使ってみましたが、 IOExceptionがスローされました。 Using sr As System.IO.StreamReader = System.IO.File.OpenText("C:\WINDOWS\pfirewall.log") End Using

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

yossy3さんはファイルのオープン部分をどのようにプログラムに記述しているのですか?

yossy3
質問者

補足

とりあえず開いてみようと思ったので、下記のように記述しています。 Dim fs As System.IO.FileStream fs = New System.IO.FileStream("C:\WINDOWS\pfirewall.log", IO.FileMode.Open, IO.FileAccess.Read)

関連するQ&A

  • VS2013 Console.WriteLine

    Visual Studio 2013 のC#でアプリを作成しています。 Console.WriteLineを実行すると 「型 'System.IO.IOException'の初回例外がmscorlib.dllで発生しました」 「追加情報:ハンドルが無効です。」 と表示されてアプリが停止します。 初めてこのような例外が発生しました。 プロパティの「Visual Studioホスティングプロセスを有効にする」にはチェック済です。 上記問題の対処方法が分かりましたら、何卒ご教授宜しく御願い致します。

  • 排他ロックが掛かっているファイルを読み込む

    排他ロックが掛かっている(別のプロセスが使用している) テキストファイルを読み込みたいのですが、 System.IO.FileStreamを実行した後に、IOExceptionエラーが発生し、 読み込みができません。 System.IO.FileStreamにはこだわってませんので、 排他ロックが掛かっているテキストファイルを読み込む方法を ご存知の方は、ご教授頂けませんでしょうか。 宜しくお願いします。 <ソースコード> 'ファイルパス wFullPath = "\\XXX.XXX.XXX.XXX\TEXT\TEST.TXT" (XXX.XXX.XXX.XXX:IPアドレス) 'ファイルを開く Dim fs As New System.IO.FileStream(wFullPath, _ System.IO.FileMode.Open, _ System.IO.FileAccess.ReadWrite, _ System.IO.FileShare.ReadWrite) 'FileStreamを基にしたStringReaderのインスタンスを作成 Dim enc As System.Text.Encoding = _ System.Text.Encoding.GetEncoding("shift_jis") Dim sr As New System.IO.StreamReader(fs, enc) 'ファイルの内容をすべて読み込む Dim s As String = sr.ReadToEnd() <開発環境> 言語:VB.NET Microsoft Visual Studio 2008 Microsoft .NET Framework Version 3.5 SP1

  • ロックファイルが消える

    ファイルロックにflockを使っているのですが、複数のファイルを扱うので、データファイルにロックをかけるのではなく別途「ロックファイル」に対してロックをかけています。 データファイルであれば読み書きモードで開く必要がありますが、ロックファイルは中身はどうでも良いので、 open(LOCK,"> $lockfile") or die ~ というように上書きモードで開いて良いとする解説を読んだので、そのようにしています。 しかし、ごくたまにロックファイルが消えてしまう現象が発生します(なかなか再現できずに条件など特定できず)。 あくまでもファイルの中身が壊れるとかいうことではなくて、ファイルそのものが消えます。 そこでお聞きしたいのですが、 1. ロックをかけたファイルが何らかの原因で消えた場合、ロック状態も消失してしまう(他プロセスがロックできてしまう)のでしょうか? 試してみたのですが、  まずプロセスAがロックをかけて  プロセスBが同ファイルにロックをかけようとすると、失敗する  プロセスAがロック解除せずにファイルを削除する  それでもプロセスBはロックに失敗する  プロセスAが(もう存在しないファイルの)ロックを解除(close)する  するとプロセスBはロックに成功する ということは分かったのですが、上記を、プロセスAがファイルを削除した後にプロセスBを動かすと、どういうわけかロックに成功してしまいます。 2. 複数プロセスが同時に上書きモードでopenしようとするのが消える原因なら、ロックファイルであってもやはり読み書きモードで開くべきなのでしょうか。そしてそれなら消えることは無いのでしょうか。 (読み込みモードではロックできないという解説もありました。) 御教授のほどよろしくお願いいたします。

  • 【C#】別プロセスがロックかけているファイルの読込

    別プロセスが更新を行っているファイルを読み取り専用で読み込みたいのですがIOExceptionがでて読み込めません。 ■エラーメッセージ 別のプロセスで使用されているため、プロセスはファイル '※ファイル名※' にアクセスできません。 ■エラーがおきているところ StreamReader sr = new StreamReader(@tempFile, Encoding.Default); ノートパットではエラーなしで開けました。サクラエディタではロックを取得できませんでした。のメッセージは出ましたが中身をみることはできました。 どうかご教示の程よろしくお願いいたします。

  • アドエスで、WindowsフォルダのROMファイルの上書きについて

    http://raintozero.blog79.fc2.com/blog-entry-300.html や http://ades.studio89.jp/?eid=392771 には、「一度どこかに置いてから上書き」 と書いてあります。 しかし、以下の操作で書き換えようとしても、上書きができません。 例で、"spl_ansmemo_p.wav"を上書きします。 1. PCで作成した spl_ansmemo_p.wav(1.38MB) をMicroSDに移動 2. アドエス(2.01a)のGSFinder-W03(Ver.1.7.0.13)で spl_ansmemo_p.wav を マイ ポケットPC に移動 3. 2.で移動したspl_ansmemo_p.wavを切り取り→Windowsフォルダへ移動→spl_ansmemo_p.wavを貼り付け 4. ファイルがロックされているという旨のメッセージが表示され、上書きはキャンセルされる 5. Windowsフォルダ内のspl_ansmemo_p.wavを探して、読み取り専用のみ解除(∵システムは解除できないので) 6. 3.を行う 7. 4.となる WindowsXP等では、Unlockerなどといったツールが存在していますが、 アドエスでは、検索してみましたが、出てきませんでした。 どのようにすれば、上書きができるのでしょうか? 分かりにくい文章で申し訳ありませんが、 よろしくお願いします。

  • ファイルの上書き保存 教えて欲しいんです

    firefoxのプラウザで flashplayerを使った時に 日本語入力できないんです ネットで調べたところ http://ameblo.jp/mkn-1/entry-11371434503.html  という回答がありました。 その通り やってみたんですが Protected Mode=0 とメモ帳で書き込み(半角英数字で)まで できたのですが 最後の上書き保存ができないんです。 ファイル c:¥windows:¥systen32¥~,,,,作成できません パスおよびファイル名が正しいか確認してください と 注意されました。 msnファイルのプロパティでは読み出し専用にはなってませんでした。 Protected Mode=0を書き込み 上書き保存するには どうすればいいのでしょうか? 御教え願います。 尚  osは vistaで 私はパソコン くわしくないです、

  • Javaでlog4jを使ってログ出力を行っています。

    Javaでlog4jを使ってログ出力を行っています。 環境は以下の通りです。 j2sdk1.4.2 log4j1.2.8 log4j.xml内で指定したログファイル(test.log)を別のアプリで開いた状態で Javaプログラムを実行するとコンソールに以下のエラーが出力されます。 【エラー発生処理】 DOMConfiturator.configure(log4j.xml); 【エラー内容】 log4j:ERROR setFile(null, true) call failed java.io.FileNotFoundException : test.log(プロセスはファイルにアクセスできません。 別のプロセスが使用中です。) ファイルを開いているために書き込めず、エラーになってしまうのは良いのですが、 ログを出力しないだけで処理自体は続行してしまいます。 (ログを書き込めなかったらそこで処理を終了したいです。) 「書き込めなかった場合に例外をcatchする」等のことは可能でしょうか?

    • ベストアンサー
    • Java
  • パソコンのすべてのファイルとフォルダが上書きできない!

    パソコンの全てのファイルとフォルダが上書きできません!フォルダ名と上書き保存しようとすると 『保存できません。ファイルがロックされています。windowsエクスプローラーのプロパティコマンドで、ファイルのロックを解除してください。ID=-45』 そこでプロパティを見ると読み取り専用にするに■の緑になってる。 だからそこを空白にし直して適用&OKを押して大丈夫かと思いきや もう一度プロパティを開くと、同じ状態です。 上書き保存できないので、全然仕事になりません。(とりあえずは別名保存しまくってます。) 誰か助けてくださいましm(_ _)m

  • ファイルのロックの解除。

    フォトショのファイル(psd)を、内蔵HDDから外付けHDDにコピーしようとしたら「***.psdをコピーできません。アクセスできません。 ディスクがいっぱいでないか、書き込み禁止になっていないか、またはファイルが使用中でないか確認してください。」とエラーメッセージが出ました。他のpsdファイルはコピーできます。名前も変更できないし、フォトショップで開こうとすると「***.psdを開くことができません。ファイルがロックされています。windowsエクスプローラの「プロパティ」コマンドを使って、ファイルのロックを解除してください。」と出ます。プロパティを見ても、読み取り専用、属性のチェックははずされていました。Unlockerを使っても「ロックされたハンドルは見つかりません。」と出ます。どうすればファイルを正常に開けるでしょうか?windowsXPでフォトショはelementsを使ってます。

  • コマンドプロンプト

    バッチファイルとタスクスケジューラを利用して Windowsファイアウォールのアクセスログを 毎日差分バックアップをとるようにしようと考えています。 しかし、Windowsファイアウォールの生成するログファイルは Windowsファイアウォールがプロセスを掴んでいるようで コピーはできても削除をすることができません。 (当然同じ理由でmoveもダメでした) ファイアウォールのプロセスを切るわけにもいかずに少し頭を悩ませています。 何か良い方法がございましたらご教示ください。 ただし、当方の都合によりパーソナルファイアウォールは Windowsファイアウォール以外を利用することができません。 予めご了承頂いた上でご回答頂きたいと思います。 以上、よろしくお願いします。

専門家に質問してみよう