アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

なお、ファイルは数GBのものが多く、他プロセスが作成を行っている場合、
30~3時間程度行っています。

A 回答 (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/cformwsh0 …

この回答への補足

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

補足日時:2011/10/16 14:03
    • good
    • 0

こちらも古典的な方法ですが排他で開いてエラーにならなかったら未使用


と判断する・・AccessのVBA中で拝借していたものです
http://oshiete.goo.ne.jp/qa/2543381.html
でも、こういったのは微妙なタイミングで使い出したりしちゃってくれるので
難しいですね。
    • good
    • 0

昔からの手法では、


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

この回答への補足

ご回答ありがとうございます!
回答つかないかと思ってたので、うれしいです!

>長時間処理するプログラムに、処理が終わったら
>処理が終了したことを書き込んでもらって、

ファイルをコピーしたり、作成したりする他プロセスは自作ではないので、
「処理が終わったら書き込んでもらう」という処理を追加することができません。

ファイルのSizeやDateLastAccessedプロパティなどで確認してみましたが、
Sizeはコピー開始時にコピー元のサイズになってしまっていますし、
DateLastAccessedはコピー開始後はコピー終了するまで更新されないみたいです。

他に何か案はないものでしょうか。

補足日時:2011/06/21 16:25
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A