7-ZIP32.dllによる圧縮 – 固定ページ 2 – プログラミング – Home

通知
すべてクリア

[解決済] 7-ZIP32.dllによる圧縮

固定ページ 2 / 2

hirocco
 hirocco
(@hirocco)
ゲスト
結合: 13年前
投稿: 138
 

やはりラップさせるのが妥当かと思います
ネットワークや嫌な振る舞いが生じないディレクトリにコピー等を行って,
ネットワークや嫌な振る舞いが生じないディレクトリでの処理の実行をして,
指定のディレクトリへコピーか移動しちゃうという感じの振る舞いをするメソッドでど
うでしょう?
ラップでも継承でもお好きなほうで
またはハンドルとかがあればCの関数でもいいよね


返信引用
bun
 bun
(@bun)
ゲスト
結合: 23年前
投稿: 761
Topic starter  

みなさん、ありがとうございます。

まず、質問に至る前までの試行錯誤結果。
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点が満足されていないと成功しないということです。

もう少し、考えてみることにします。


返信引用
bun
 bun
(@bun)
ゲスト
結合: 23年前
投稿: 761
Topic starter  

作者に問い合わせたところ、
起点フォルダ(Base directory)が見つからないと、7-ZIP内部で異常終了
してしまうそうです。
呼び出し側で何とかできるものではなさそうです。

さすがに、7-ZIP内部までは触りたくないので、
正攻法(コマンドを変えずに動作するようにする)はあきらめることにします。

いろいろ考えましたが、どれも、著しい性能低下や危険性をはらむもの
ばかりです。よって、
圧縮ファイル内のフォルダ構成が異なる圧縮方法でいくことにします。
※ 以下のようにTest1\フォルダが無くなってしまう
Test1-1\
Test1-2\
Test1-2-1\

みなさん、貴重なご意見をいただき、ありがとうございました。


返信引用
bun
 bun
(@bun)
ゲスト
結合: 23年前
投稿: 761
Topic starter  

クローズします。


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました