フォルダ書込み時の排他処理
投稿者 rand  (社会人)
投稿日時
2022/7/19 08:57:58
VB.NETについて質問します。複数のソフトでネットワーク上の同じ共有フォルダへファイルをコピーする作業があります。(My.Computer.FileSystem.CopyDirectory で、あるファイルをその共有フォルダへ手動でコピーします。)このとき、ある1つのソフトがコピーしている最中に、他のソフトがその共有フォルダへコピーしようとした場合にその作業が終わるまで処理を行わせない排他制御などあれば教えて頂けますでしょうか?
投稿者 るきお  (社会人)
投稿日時
2022/7/19 18:14:32
>複数のソフトでネットワーク上の同じ共有フォルダへファイルをコピーする作業があります。
つまり、VBで作成した同じプログラムを複数のマシンで実行して、それぞれが同じフォルダーにファイルをコピーする機能が実行するということであっていますか?
>他のソフトがその共有フォルダへコピーしようとした場合にその作業が終わるまで処理を行わせない排他制御などあれば教えて頂けますでしょうか?
ファイル名も異なるということでしょうか?
たとえば、そのフォルダーが Z:\shared だったとして、
あるマシンで実行しているプログラムではそこに a.csv をコピーします。別のマシンで実行しているプログラムではそこに b.csv をコピーします。と、こういうことですか?
そして、a.csvのコピーが終わるまで、b.csvをコピーさせないように排他制御したいと?
この通りだとするなら、今まで私が聞いたことがない仕様ですね。機能的にもできないように思います。一応、その対象のフォルダーを先にコピーする方がリネームしてしまうという手はあると思います。そして、コピーが終わったらもとのフォルダー名を戻すという感じです。でも決してお勧めではありません。エラー終了した時の処理が面倒そうですし。
何か事情があるのだとは思いますが、設計を変更することを考えられることをお勧めします。
つまり、同時にコピーしてはいけないという何かの事情の方を変更するということです。
つまり、VBで作成した同じプログラムを複数のマシンで実行して、それぞれが同じフォルダーにファイルをコピーする機能が実行するということであっていますか?
>他のソフトがその共有フォルダへコピーしようとした場合にその作業が終わるまで処理を行わせない排他制御などあれば教えて頂けますでしょうか?
ファイル名も異なるということでしょうか?
たとえば、そのフォルダーが Z:\shared だったとして、
あるマシンで実行しているプログラムではそこに a.csv をコピーします。別のマシンで実行しているプログラムではそこに b.csv をコピーします。と、こういうことですか?
そして、a.csvのコピーが終わるまで、b.csvをコピーさせないように排他制御したいと?
この通りだとするなら、今まで私が聞いたことがない仕様ですね。機能的にもできないように思います。一応、その対象のフォルダーを先にコピーする方がリネームしてしまうという手はあると思います。そして、コピーが終わったらもとのフォルダー名を戻すという感じです。でも決してお勧めではありません。エラー終了した時の処理が面倒そうですし。
何か事情があるのだとは思いますが、設計を変更することを考えられることをお勧めします。
つまり、同時にコピーしてはいけないという何かの事情の方を変更するということです。