- PR -

ファイルのロック(別プロセス使用か否か)の調査

1
投稿者投稿内容
山田
常連さん
会議室デビュー日: 2004/11/22
投稿数: 25
投稿日時: 2004-11-25 16:58
特定のファイルが、現在別プロセスで使用されているかどうか
調べるメソッドは、ありますでしょうか。

連続してファイルを読み込む処理を行っておりますが
ファイルがロックされていたら、Sleepしてしばらく待ち、
ロックされていなかったら、そのまま読み込む処理を行いたいのです。

どうか教えて下さい
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-11-25 20:59
諸農です。

ロックされているファイルをオープンした時にスローされる例外を調べて、
それをキャッチするようにすればいいと思います。

コード:
bool FLG = false;
while (!FLG){
    try
    {
        Fileのオープン;
        File読み込み;
        Fileクローズ;
        FLG = true;
    }chatch(発生する例外 ex){
        Thread.Sleep(休みたい時間);
    }
}



_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-11-25 21:48
引用:

山田さんの書き込み(2004-11-25 16:58)より:

特定のファイルが、現在別プロセスで使用されているかどうか
調べるメソッドは、ありますでしょうか。


 別プロセスがロックしているなら、調べることができます。しかし、ロックしていない(共有オープンしている)なら、検出不可能です。

こんなことしてました↓参考まで
コード:
Dim finfo As New System.IO.FileInfo(ファイル名)
Dim stream As System.IO.Stream = Nothing
Dim lp As Integer = 0
While True
	Try
		stream = finfo.Open(IO.FileMode.モード, IO.FileAccess.アクセス権, IO.FileShare.シェア)
		ファイルを扱う
		Exit While

	Catch ex As IO.IOException
		' ロック解除待ち
		lp += 1
		If lp > 10 Then Throw ex ' これだと10秒で例外送出
		System.Threading.Thread.Sleep(1000) ' 1秒待つ

	Finally
		If Not stream Is Nothing Then stream.Close()
	End Try
End While


斜字体のところは、適切に修正してください。

_________________
山田
常連さん
会議室デビュー日: 2004/11/22
投稿数: 25
投稿日時: 2004-11-26 09:11
>>Jubeiさん
>>Jittaさん

ご返答、ありがとうございます。
お二人に教えて頂いた通り、例外をキャッチしてSleepするよう試しましたところ
思うように動作してくれました。
有り難うございました。
1

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