やはりラップさせるのが妥当かと思います
ネットワークや嫌な振る舞いが生じないディレクトリにコピー等を行って,
ネットワークや嫌な振る舞いが生じないディレクトリでの処理の実行をして,
指定のディレクトリへコピーか移動しちゃうという感じの振る舞いをするメソッドでど
うでしょう?
ラップでも継承でもお好きなほうで
またはハンドルとかがあればCの関数でもいいよね
みなさん、ありがとうございます。
まず、質問に至る前までの試行錯誤結果。
1) どっかにコピーしてからZIP圧縮
処理の速さが売りのソフトであるため、どっかにコピーするために時間が掛か
ってしまっては駄目
2) 起点フォルダ指定をやめる
起点フォルダ指定は、SetCurrentDirectory()をしているだけのようなので、
起点フォルダ指定をやめ、自分でカレントフォルダを移動してから、
起点フォルダ指定無しのコマンド呼び出し
u C:\Test.zip Test1\* -r
コードを書いてる途中に気がつく
SetCurrentDirectory(\\\\Test);
だめじゃん、PC名をカレントフォルダにできないよ。
3) 起点フォルダを一階層落とす
今回の場合なら、以下のようなコマンドにする
u C:\Test.zip \\Test\Test1\ * -r
圧縮には成功するが、圧縮ファイル内のフォルダ構成が異なる
(Test1\フォルダが無くなってしまう)
Test1-1\
Test1-2\
Test1-2-1\
4) 仮圧縮後、フォルダごと移動
3)の方法で圧縮を行った後、Test1\フォルダを作成して、全フォルダを内部
に移動
いい案だと思ったが、そのような処理を行うコマンドが見あたらない。
ここまで来て、質問となりました。
そして、みなさんの意見を聞いていて、ふと思いつきました。
圧縮後のファイルにてフォルダ移動ができないなら、
圧縮前のファイルをフォルダ移動すればどうか?
MoveFile()なら実際のファイルコピーを伴わないので一瞬です。
結果、問題無さそうです。
\\Test\Test1\ フォルダを圧縮するのなら、
\\Test\Test1\Test1\ などと、
1階層深いフォルダに移動してからバックアップを行います。
u C:\Test.zip \\Test\Test1\ Test1\* -r
バックアップ終了後、元のフォルダに戻せばOKです。
問題は、フォルダごと移動できるだけの権限が必要なこと。
および、フォルダ内のファイルが1つもロックされていないこと。
の2点が満足されていないと成功しないということです。
もう少し、考えてみることにします。
作者に問い合わせたところ、
起点フォルダ(Base directory)が見つからないと、7-ZIP内部で異常終了
してしまうそうです。
呼び出し側で何とかできるものではなさそうです。
さすがに、7-ZIP内部までは触りたくないので、
正攻法(コマンドを変えずに動作するようにする)はあきらめることにします。
いろいろ考えましたが、どれも、著しい性能低下や危険性をはらむもの
ばかりです。よって、
圧縮ファイル内のフォルダ構成が異なる圧縮方法でいくことにします。
※ 以下のようにTest1\フォルダが無くなってしまう
Test1-1\
Test1-2\
Test1-2-1\
みなさん、貴重なご意見をいただき、ありがとうございました。
クローズします。