トップ回答者
ファイルコピー時の元のファイルの状態について

質問
-
いつもお世話になっております。
現在、バッチを作ってファイルをコピーしようと思っています。
VBScriptを使おうと考えており、FileSystemObjectのcopyfileやcopyfolderでコピーしようと思っています。
タイトルは、ファイルコピー時の元のファイルの状態についてというものですが、
実際には以下の点が気になっています。
1.ファイルコピーの際、自分自身(コピーするバッチ自体)もコピー対象になるのですが、問題ないでしょうか。
2.ファイルコピーの対象が、別のバッチ(*.vbsとか*.exeとか)になることもあるのですが、コピー中にコピー元を実行(または実行中にコピー)しても問題ないでしょうか。
3.コピー元のファイルを別のプロセスが開くこともあると思うのですが、このとき、読み込みモードならオープンしても問題ないでしょうか。
書込みモードだとエラーになり、読み込みモードだとエラーにならなかったのですが。
当方にてある程度の実験は可能ですが、Windowsの動作に詳しいかたがいらっしゃいましたら原理を教えていただけるとありがたいです。
実験+理論で大丈夫だと言えればいいので、原理と言ってもそれなりにで構いません。
例えば、コピーは読み込みモードで開いているのと同じだから大丈夫だよとか(←根拠のない例ですので合ってるかどうかわかりません)。
よろしくお願いします。
回答
-
ハッシュドビーフさん、こんにちは。
ご質問の件に対して、問題あるか無いかは、何をしたいかにも依ると思います。
コピーが正常に実行される、もしくは実行が正常に終了するか否かを心配されているのであれば、大丈夫と思いますが。。。参考になるかどうか分かりませんが、関連のありそうなサイトをお伝えしておきます。
ファイルロック - 実装 - Windows
http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%AD%E3%83%83%E3%82%AF>プログラムとして実行されているファイル(例えば、EXE、COM、DLL、CPLなど)は、
>一般にライト/削除アクセスのためのオープンができないようファイルシステムが制限し、
>共有違反(sharing violation)が報告される。しかし、ある種のアクセスは許されている。
>例えば、実行中アプリケーションのファイルを改名したりコピー(リード)したりすることは可能である。
Windows Vista SP1 でのファイル コピー機能強化の詳細
http://technet.microsoft.com/ja-jp/windows/ee909526.aspx上記ページの中に記述されているProcessMonitorを使用すると、実際の動きが掴めるかもしれないので、
試してみてはどうでしょう。あまり良いアドバイスとは言えませんが・・・少しでも参考になれば幸いです。
もし、何かしらアドバイス出来る方がいらっしゃいましたら、ご投稿の程、よろしくお願いします。
マイクロソフト株式会社 フォーラム オペレーター 高橋春樹- 回答としてマーク ハッシュドビーフ 2010年2月22日 12:02
-
ファイルを開くときに、どの様に共有できるかを指定するフラグがあります(FileShare 列挙体, CreateFile 関数の「共有モード」)。このフラグをどの様に指定するかによって、多重オープンの要求結果は変わります。
Jitta@わんくま同盟- 回答としてマーク 高橋 春樹 2010年2月24日 0:39
すべての返信
-
ハッシュドビーフさん、こんにちは。
ご質問の件に対して、問題あるか無いかは、何をしたいかにも依ると思います。
コピーが正常に実行される、もしくは実行が正常に終了するか否かを心配されているのであれば、大丈夫と思いますが。。。参考になるかどうか分かりませんが、関連のありそうなサイトをお伝えしておきます。
ファイルロック - 実装 - Windows
http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%AD%E3%83%83%E3%82%AF>プログラムとして実行されているファイル(例えば、EXE、COM、DLL、CPLなど)は、
>一般にライト/削除アクセスのためのオープンができないようファイルシステムが制限し、
>共有違反(sharing violation)が報告される。しかし、ある種のアクセスは許されている。
>例えば、実行中アプリケーションのファイルを改名したりコピー(リード)したりすることは可能である。
Windows Vista SP1 でのファイル コピー機能強化の詳細
http://technet.microsoft.com/ja-jp/windows/ee909526.aspx上記ページの中に記述されているProcessMonitorを使用すると、実際の動きが掴めるかもしれないので、
試してみてはどうでしょう。あまり良いアドバイスとは言えませんが・・・少しでも参考になれば幸いです。
もし、何かしらアドバイス出来る方がいらっしゃいましたら、ご投稿の程、よろしくお願いします。
マイクロソフト株式会社 フォーラム オペレーター 高橋春樹- 回答としてマーク ハッシュドビーフ 2010年2月22日 12:02
-
ファイルを開くときに、どの様に共有できるかを指定するフラグがあります(FileShare 列挙体, CreateFile 関数の「共有モード」)。このフラグをどの様に指定するかによって、多重オープンの要求結果は変わります。
Jitta@わんくま同盟- 回答としてマーク 高橋 春樹 2010年2月24日 0:39
-
いつもお世話になっております。
まとめて返信させていただきます。
高橋 春樹様
>コピーが正常に実行される、もしくは実行が正常に終了するか否かを心配されているのであれば、大丈夫と思いますが
まさにその部分が知りたかったのです。そして
>>例えば、実行中アプリケーションのファイルを改名したりコピー(リード)したりすることは可能である。
の部分が探していたものです。
調査不足でした。
アプリケーションが先に実行されている場合はおそらく上記のような形ではないかと思われますが、
2つ目のリンクより
>Windows では、コピー元とコピー先の双方のファイルをキャッシュ モードで開き、
のキャッシュモードがよくわかりませんでした。
とりあえず調べてみます。
ありがとうございました。
Jitta様
そのモードは知りませんでした!
今度使用してみようと思います。
回答ありがとうございました。
渋木宏明様
スクリプト処理系の実装によるということですね。
開くことができれば問題ないし、開くことができなければエラーになるのであれば、なんとか実装というか運用方法が
ありそうです。
しかし実行中にコピーするのはなかなか難しそうですね。
もう少し勉強しないとわからなそうです。
回答ありがとうございました。