• 締切済み

特定のファイルを他のプロセスが編集中か確認する方法

VBScriptで指定フォルダにあるファイルに対して処理を行っています。 その指定フォルダにファイルがコピー中であったり、 他のプロセスがファイルを作成中だったりする場合、 このスクリプトを実行すると、コピー中や作成中のファイルに対して処理を行ってしまうため、 正しく処理ができません。 コピー中だったり、他のプロセスが作成や編集を行っている場合、 そのファイルに対しては処理を行わず、次回実行時に編集中でなければ 処理を行うようにしたいと思います。 コピー中だったり、他のプロセスが作成や編集を行っているかどうかを VBScriptで識別する方法を探したのですが、分からなかったため、教えてください。 なお、ファイルは数GBのものが多く、他プロセスが作成を行っている場合、 30~3時間程度行っています。

みんなの回答

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.3

単にエラー対応処理を書いたらいいだけでは? dim ErrorCodeSave on error resume next open ・・・ ErrorCodeSave = Err.Number On Error Goto 0 if ErrorCodeSave > 0 then if ErrorCodeSave = xx(具体的な数値は実行してみて確認してください) then msgbox("処理中。時間を置いてから再実行してください") else Err.Raise ErrorCodeSave end if end if みたいな感じで。 参考: http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh09/cformwsh09_02.html

palayo
質問者

補足

他プロセスが書き込み中でもファイルはオープンできてしまうので、 エラーにならないのです・・・。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

こちらも古典的な方法ですが排他で開いてエラーにならなかったら未使用 と判断する・・AccessのVBA中で拝借していたものです http://okwave.jp/qa/q2543381.html でも、こういったのは微妙なタイミングで使い出したりしちゃってくれるので 難しいですね。

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

昔からの手法では、 別のファイルを用意し、 長時間処理するプログラムに、処理が終わったら 処理が終了したことを書き込んでもらって、 そちらを確認して次の処理を実行することで対応 します。

palayo
質問者

補足

ご回答ありがとうございます! 回答つかないかと思ってたので、うれしいです! >長時間処理するプログラムに、処理が終わったら >処理が終了したことを書き込んでもらって、 ファイルをコピーしたり、作成したりする他プロセスは自作ではないので、 「処理が終わったら書き込んでもらう」という処理を追加することができません。 ファイルのSizeやDateLastAccessedプロパティなどで確認してみましたが、 Sizeはコピー開始時にコピー元のサイズになってしまっていますし、 DateLastAccessedはコピー開始後はコピー終了するまで更新されないみたいです。 他に何か案はないものでしょうか。

関連するQ&A