- - PR -
ファイルの2重起動
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-04-22 17:44
いつもお世話になっています。
現在ファイルへの書き込みプログラムを作成しています(vb.net)。 例えば"test.txt"というファイルに書き込む場合、 メモ帳等で"test.txt"が使用されていると下記のようなエラーになってしまいます。 プロセスはファイル "C:\Documents and Settings\usr\デスクトップ\test.txt" にアクセスできません。このファイルは別のプロセスが使用中です。 そこで、このファイルが使用中かどうかをチェックする方法を教えて頂けないでしょうか? ちなみに書き込みは下記のようなコードで行っています。 Dim myStrWriter As System.IO.StreamWriter myStrWriter = New System.IO.StreamWriter("test.txt") myStrWriter.Write("もじ") myStrWriter.Close() よろしくお願いします。 | ||||
|
投稿日時: 2004-04-22 18:26
System.IO.File.Open(String, FileMode, FileAccess, FileShare)で開こうとして、例外が発生すれば使用中。詳しくはMSDNを参照。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemiofileclassopentopic3.asp | ||||
|
投稿日時: 2004-04-22 19:49
早速のご返事ありがとうございます。
例外処理でチェックすることで解決できました。 ちなみに例ではExceptionクラスになってますが、 今回の2重起動だけに限定するならばIOExceptionクラスで構わないですよね。 おかげさまで早急に解決できました。 ありがとうございました。 | ||||
|
投稿日時: 2004-04-22 20:27
FileStreamやFileInfoのOpen等を使って、ファイルのロックモードを明示的に指定してやれば、メモ帳で開いているようなのは無視できたような気もします。
※うーん、どうだったかな、ちょっと微妙… やっぱり書き込み共有にしてないと駄目だったっけか… | ||||
|
投稿日時: 2004-04-23 08:18
UnauthorizedAccessExceptionも、キャッチする必要があると思います。 try 〜 catch ex as ioexception 〜 catch ex as UnauthorizedAccessException 〜 finally 〜 end try | ||||
|
投稿日時: 2004-04-23 13:52
なちゃさん、Jittaさんありがとうございます。
確かにFileStreamを用いるとメモ帳は無視でき、 後勝ちの状態になりました。 またUnauthorizedAccessExceptionについて、 ファイルの属性、権限でのエラーであり、 2重起動とは異なると考えたのですが、 間違っていますでしょうか? 知識が乏しいため自信が無いのでご教授下さい。 ちなみに他のプログラムでFileStream等で開いている場合もIOExeptionでCatch出来ました。 | ||||
|
投稿日時: 2004-04-23 15:56
いえ、例外処理を誰が行うかの問題です。おそらく、FileOpenDialogを使われているでしょうから、ファイルがないだのエラーは発生し得ないと判断しました。そうするとこの2つが発生するかもしれない例外となります。発生するかもしれない例外を、誰が処理すべきか、ということです。 | ||||
|
投稿日時: 2004-04-23 17:22
Jittaさんありがとうございます。
そうですね。 確かに今起こりそうなのはこの2つですから、 UnauthorizedAccessExceptionもCatchしておいた方が良いですね。 何度も丁寧に教えていただき本当にありがとうございました。 |
1