• 締切済み

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

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

  • 特定ファイルが別プロセスで利用されてるかを知りたい

    CSVやPDFファイルを作成する処理があります。 このファイル作成処理は、同じパス、ファイル名で何度か上書きで書込む可能性があります。 また、手作業でファイルを開いたり操作する事があります。 ファイルを作成する時に、ファイルが手作業など別プロセスで使用されてた場合 FileNotFoundException の例外が発生してしまいます。 ファイル作成までにとても時間が掛かる事もあり、 ファイル作成処理の前に、あらかじめ別プロセスで利用されてるかどうかを 確認して、利用されてる場合は事前に例外にしたいのですが、 そのような事は可能でしょうか? (尚、先程一旦質問しておりましたが、内容に誤りがあった為書き直しています。)

    • ベストアンサー
    • Java
  • 特定のプロセスが実行中か調べるスクリプトの書き方

    WindosでPowerShellやWSHやDOSコマンドなどありますが 2008 サーバーで一般的なスクリプトを書くには何を使えば良いでしょうか? 書きたいスクリプトは、ある.NETのプログラムAがあり、 Aが実行(常駐)とうかプロセスがない場合は実行され、 プロセスがある場合は実行しないというスクリプトを書きたいです。 どのように作ればよいでしょうか?   

  • あるファイルが他プロセスによってオープンされているかどうかを確認する方法

    2つのディレクトリの内容を比較し、その結果を標準出力に出力するプログラム(diffのラッパーです)を作成していますが、以下のように出力を比較対照のディレクトリ内のファイルにリダイレクトした場合、このファイルまで比較してしまいます。 $ mydiff . directory > diffresult これを防ぐため、ファイルを比較する際に、ファイルが他プロセスによってオープンされているかどうか調べ、その旨をstderrに出力するようにしたいのですが、その方法がわからず困っていますのでよろしくお願いします。

  • プロセスが作成したファイルの情報取得方法について

    あるソフトウェアを利用しているのですが、ソフトウェアが作成して いる一時ファイルをウイルスバスター(おそらく)が監視のために アクセスしたことで、競合が発生し、ソフトウェアの処理が異常終了 する事象が発生しています。 ソフトウェアが一時ファイルの作成場所は環境変数(TEMP)に設定 されているフォルダー(つまり、ソフトウェアを実行しているユーザー のテンポラリフォルダー)です。 しかし、ソフトウェアが作成する一時ファイルのファイル名に規則性は あるようですが、どのようなファイルを作成するのかが掴めていません。 特定のソフトウェア(プロセス)がアクセスするファイルをトレースする ことはできないでしょうか。 Sysinternal社のプロセスモニターを利用してみましたが、テンポラリ フォルダーにファイルを作成、オープン、書き込み、クローズ、削除 した履歴は確認できましたが、作成したファイル名は確認できませんでした。 特定のソフトウェア(プロセス)が特定のフォルダーに作成したファイルの 情報を収集する方法があれば、教えてください。 Windowsの標準機能、またはフリーのツールでの情報収集が希望です。

  • windowsでファイルコピーのプロセスを確認できるか

    Windows 2003 serverが以下の3台存在します。 サーバA サーバB サーバC サーバAからサーバB上でリモートでコマンドを実行し、サーバB上のファイルをサーバCにコピーするジョブを組んでいます。 コピーするファイルは10GBで、サーバBからサーバCまで約2時間かかります。 サーバAでコマンドを実行したということは確認できるのですが、サーバBとサーバC間でコピーされている最中に、本当にコピーが実行されているのかどうかが確認できず、困っています。 サーバAからリモートでコマンドを実行しているために、サーバB上でもサーバC上でもファイルがコピーされるアニメーションは現われません。サーバC上のファイルコピー先でも、ファイルが表示されないか、ファイルの最大サイズがはじめから表示されてしまい、更新を押してもファイルサイズが変動しないためコピーされているかわかりません。 コピーを表すプロセスが確認できればよいのですが、コピーのプロセスとはどのプロセスなのでしょうか? もしどなたかご存知でしたら教えていただきたく思います。

  • 特定のエクセルファイルをcvsで保存するスクリプト

    毎月決まった作業があり、バッチ処理したいので教えてください。 2007.xlsファイルの○○Sheetを△△フォルダに△△.cvs保存したいと 思います。 たった、これだけなのですが、VBScriptでバッチ処理するスクリプトを 教えてください。 ショットカットをクリックするだけでこれが自動化できると 作業がシンプルになります。

  • Appleスクリプトでフォルダ内ファイルを開く方法

    フォルダ内にエクセルファイルが1000個程あり、 そのエクセルファイルを一つずつ開いて、 別のファイルにそのファイルの値をコピーするということをやりたいと思います。 別のファイルにそのファイルの値をコピーするというのは、 自分でも何とかできそうなので、 (1)ファイルが入ったフォルダを、ダイアログで指定する方法 (2)フォルダ内のエクセルファイルを順番に開いて、作業が終わったら閉じる方法 のAppleスクリプトでの記述方法を、教えていただけないでしょうか? Windowsのエクセルファイルでマクロを作成したのですが、 Macでは動かず、調べるとAppleスクリプトで作成するということが分かりましたが、 そこから先が、本当にお手上げ状態です。 どうぞよろしくお願いします。

  • 実行ファイル内のファイルを編集するには

    実行ファイル(.exe)内にあるスクリプト(.bin)ファイルを編集したいのですが、どのようにすればよいのでしょうか?

  • batファイルの作成方法について

    batファイルの作成方法について 開いてるPPTファイルを終了して(dkill.exeにて) (1) C:\dkill.exe powerpnt.exe フォルダ内のPPTファイルを全削除して (2) del /f /q C:\test\*.ppt PCをシャットダウン (3) %windir%\system32\shutdown.exe したいのですが、batファイルを作って(1)(2)(3)を並べて実行すると 「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」となって (2)ファイル削除が実行できません。 それぞれ別々に実行すれば問題なく実行できます。 おそらく、(1)の処理が終了しない状態で、(2)の削除が実行できないと思うのですが・・・ この3つの処理をひとつのbatファイルで実行するにはどうしたらよいでしょうか? 初心者なのでわかりやすい回答をお願いしますm(__)m

  • プロセスがファイルを掴んだまま放さない!

    困っています。 どなたかお助けください。 ジョブ実行用のユーザでバッチファイルを実行したところ、 不具合があったようでエラー終了しました。 するとバッチファイル内で入出力していたファイルが、 プロセスにつかまれたままの状態になり、編集も削除も出来なくなってしまいました。 とりあえずそのファイルをいったん削除したいのですが、 どうすればよいでしょうか? そのジョブ実行用のユーザではログオンできません。 またOS再起動も出来ません。 ・・・何か手立てはあるでしょうか? 大変困っております。 どうかよろしくお願いします。 OSはWindows2003Serverです。