- PR -

ファイルの2重起動

1
投稿者投稿内容
michael
会議室デビュー日: 2004/03/12
投稿数: 14
投稿日時: 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()

よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 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
michael
会議室デビュー日: 2004/03/12
投稿数: 14
投稿日時: 2004-04-22 19:49
早速のご返事ありがとうございます。

例外処理でチェックすることで解決できました。
ちなみに例ではExceptionクラスになってますが、
今回の2重起動だけに限定するならばIOExceptionクラスで構わないですよね。

おかげさまで早急に解決できました。
ありがとうございました。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-04-22 20:27
FileStreamやFileInfoのOpen等を使って、ファイルのロックモードを明示的に指定してやれば、メモ帳で開いているようなのは無視できたような気もします。
※うーん、どうだったかな、ちょっと微妙…
 やっぱり書き込み共有にしてないと駄目だったっけか…
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-23 08:18
引用:

michaelさんの書き込み (2004-04-22 19:49) より:

ちなみに例ではExceptionクラスになってますが、
今回の2重起動だけに限定するならばIOExceptionクラスで構わないですよね。


UnauthorizedAccessExceptionも、キャッチする必要があると思います。

try
 〜
catch ex as ioexception
 〜
catch ex as UnauthorizedAccessException
 〜
finally
 〜
end try
michael
会議室デビュー日: 2004/03/12
投稿数: 14
投稿日時: 2004-04-23 13:52
なちゃさん、Jittaさんありがとうございます。

確かにFileStreamを用いるとメモ帳は無視でき、
後勝ちの状態になりました。

またUnauthorizedAccessExceptionについて、
ファイルの属性、権限でのエラーであり、
2重起動とは異なると考えたのですが、
間違っていますでしょうか?

知識が乏しいため自信が無いのでご教授下さい。

ちなみに他のプログラムでFileStream等で開いている場合もIOExeptionでCatch出来ました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-23 15:56
引用:

michaelさんの書き込み (2004-04-23 13:52) より:

またUnauthorizedAccessExceptionについて、
ファイルの属性、権限でのエラーであり、
2重起動とは異なると考えたのですが、
間違っていますでしょうか?


 いえ、例外処理を誰が行うかの問題です。おそらく、FileOpenDialogを使われているでしょうから、ファイルがないだのエラーは発生し得ないと判断しました。そうするとこの2つが発生するかもしれない例外となります。発生するかもしれない例外を、誰が処理すべきか、ということです。
michael
会議室デビュー日: 2004/03/12
投稿数: 14
投稿日時: 2004-04-23 17:22
Jittaさんありがとうございます。

そうですね。
確かに今起こりそうなのはこの2つですから、
UnauthorizedAccessExceptionもCatchしておいた方が良いですね。
何度も丁寧に教えていただき本当にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)