- - PR -
ファイルロックの検出
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-09-27 17:12
VB.NETでFile.Moveメソッドを利用してファイルの移動処理をさせるとき
ファイルがロックされているか判断する方法はありますか? ロック状態でFile.Moveを実行すると移動元のファイルがロックされていても 移動先に同じ名前ファイルがあってもIOExceptionしかキャッチできません。 | ||||||||
|
投稿日時: 2004-09-27 17:42
一回、自分で 「必要だと思われるロックで開いてみる」と わかるんじゃないでしょうか? | ||||||||
|
投稿日時: 2004-09-28 09:16
CHNさん、ご回答ありがとうございます。 実際に下記の2点を既にやってみまています。 ・テキストファイルをメモ帳で開いた状態でファイル移動を行う。 ・ファイル移動先に同名ファイルが存在させてファイル移動を行う。 このとき、いずれもIOException(describeは違いますが)で Catchされてしまいます。 もちろん、移動先に同名ファイルがあるかどうかは先に調べるのですが 悪いタイミングで同名ファイルが存在した場合にその判断を行いたいと 思っています。 Catchした後にファイル存在チェックを行い判断することも可能かとは 思っているのですが、単純にTry〜Catchで処理する方法はないでしょうか? | ||||||||
|
投稿日時: 2004-09-28 09:24
以下に間違いがありました
・テキストファイルをメモ帳で開いた状態でファイル移動を行う。 メモ帳⇒Excel でした。 | ||||||||
|
投稿日時: 2004-09-28 09:26
たびたびの記述ミスがありました。
describe⇒message です。 | ||||||||
|
投稿日時: 2004-09-28 09:34
あんまり意味無いと思いますよ。 あるファイルがある瞬間にロックされていなくても、次の瞬間にはロックされているかもしれないわけで。。。
試みた操作が Move で、それに失敗したなら、端的に「移動に失敗しました」というえらメッセージを表示すればいいんじゃないですかね? さらに親切さを求めるなら、エラー表示のダイアログに「詳細」ボタンをつけて、それを押したら IOException.Message の内容を表示してやるとか。 プログラムの制御上、どうしても細かい切り分けが必要なら、MoveFile() か SHFileOperation() API を呼び出して、その戻り値や Marshal.GetLastWin32Error() の値を調べてみるとか。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||||||
|
投稿日時: 2004-09-28 10:12
開いてみるというのは、ソースコードでやってみるというです。
検査の項目として ・コピー先のファイルの存在 ・そのファイルへのアクセス権 ・読み取り、書き込み可能か ・・・などなど考え得るあらゆることを をコピー、または移動の前にコードで検査が必要です。 ※また、検査をパスできたとして安心できません。ファイルが基本的に だれでも使用可能ですから。工夫が必要です。 どの検査で引っかかるかで自然となにがどうなっているかはわかるでしょう。 当然検査の順番は工夫が必要です、というか一番重要です。 がんばってください。 [ メッセージ編集済み 編集者: CHN 編集日時 2004-09-28 10:15 ] | ||||||||
|
投稿日時: 2004-09-30 10:35
渋木宏明(ひどり)さん、CHNさん ご回答ありがとうございます。
おっしゃるとおりです。 今回のポイントは利用者へのエラー表示をどう行うかという点につきます。 ユーザーが抵抗感を感じない、かつエラー詳細がわかる表示をおこなうか、 それとも開発者寄りのエラー表示を行うかが最大の問題でした。
そうですね、チェックの順序は重要ですね。 ただ、既にチェックしたものが再度ひっかかる場合も十分考えられるので その対処は必要でしょうね。 今回はエラー表示としては簡易表示とし、詳細な内容はログに出力するように したいと思います。 ありがとうございました。 |
1