CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

ソフト開発

コピー元でzip圧縮後にネットワーク越しにファイルコピーしてコピー先で解凍するのを自動化できないか

投稿日:2019年8月25日 更新日:

コピー元でzip圧縮後にネットワーク越しにファイルコピーしてコピー先で解凍するのを自動化できないか。。とここ数日考えていた。そんなことをしたい理由と要件をはっきりさせておく。

対象のファイルやフォルダがデカいというのがポイント。数十~数百GBになる。Hyper-Vの仮想マシンのvhdxやavhdxはそのくらいの容量になるもので、Hyper-Vホスト間で移動したいということがある。そのくらいのサイズになると一晩コピー処理させておかないと終わらないし、ヘタすると週末ずっと動かしておく必要がある。昼間にそんな巨大なデータをコピーしているとネットワーク回線に負荷がかかって、ネットワーク全体の処理が低速化するはずで、社内の怖い人に怒られる恐れがある。圧縮することで少しでも小さくして、コピーする処理時間を減らしてやりたいということ。また、細切れの小さいファイルをコピーしたいということもあって、VisualSoruceSafeのデータがそれにあたる。小さいファイルを大量にコピーしようとするとやけに時間がかかるということは、やったことある人ならよくわかるだろう。

zipファイルのサイズ上限は4GBなんて言われているが、それはOS標準の機能や少し前のソフトの制限。7zipの64bit版であれば制限はない模様。圧縮前で240GBのファイルで、圧縮と解凍ができることは確認済み。どうせ7zipを使うのであれば、圧縮率の高い7zを使ってもいいだろう。
①コピー元でzip圧縮 ②zipをネットワーク越しにコピーする ③コピー先で解凍する という3つのステップを行うわけだが、これを手動でやると数時間おきに操作をしなければいけない。処理が終わったというタイミングに気付かなければ時間の無駄だし、裏で動かしておいていつ終わるかとちょこちょこと見なければいけないのは気が散る。処理開始させたら、あとはずーっとやらせておいて、最後に結果を出すというのがよい。

以下で要件をまとめてみる。
1.コピー元のファイル(またはフォルダ)を指定する
2.コピー先のフォルダを指定する
3.1で指定したファイルのサイズを取得する
4.2で指定したフォルダの空き容量を取得する
5.3のサイズが4のサイズ以上ならエラー
6.1で指定したファイルを圧縮する
7.6で圧縮したファイルを2で指定したフォルダに移動する
8.7で移動したファイルをその場で解凍する
9.8で解凍したファイルサイズと2のサイズが同じでないならエラー
10.7で移動した圧縮ファイルを削除する
エラー処理まで含めると結構な手数になる。

理想で言えば、Shell(エクスプローラ)を拡張して「圧縮貼り付け」なるメニューを追加すればいいのだが、Shellの拡張自体がハードル高そうなので、C#のフォームアプリで作るのがいいだろう。C#(つまり.NETアプリ)ならばzip圧縮が自前で行えるらしいけど、ファイルサイズの上限が気になる。4GB超えは無理そうだ。よって、7zipをコマンドラインで呼び出すというのが得策だ。以下のように単純な呼び出しでzip圧縮ができる。7z.exe a 圧縮結果.zip 圧縮対象
C#で誰でも使える状態にするのもいいけど、PowerShellで処理を書き込んでしまうのもいいかも。なんて言ってるおいらがPowerShellをよく知らんので、そこから勉強しなきゃいかんからちょいとメンドウ。

こういうアプリってありそうだと思ってググってみたがなかった。探し方が悪いのかもしれない。いや、こういう要件が一般的でないというだけか。でも、潜在的なニーズはあるような気がするので、まともなものができたらフリーソフトで公開してみるのもよいだろう。ニッチな要求だとしても、そこそこのダウンロードがされるんじゃないか。

-ソフト開発

執筆者:


  1. sugi より:

    はじめまして、お邪魔いたします。
    ファイルを圧縮してコピーしたほうが速いのか?ということを検索していて、こちらにたどり着きました。
    同じく検索で見つけたのですが、「小さいファイルを大量にコピーしようとするとやけに時間がかかる」を回避するソフトとして、「FastCopy」というものがあるそうですよ。
    圧縮してくれるわけではなさそうなのですが、「可能な限り大きな単位で Read/Write する」そうです。
    com様の要件のように数百GBとなると、圧縮したほうが早いかもしれませんが…。

    お邪魔いたしました。

    • com より:

      なるほど、FastCopyチェックしときます。ネットワーク回線が遅ければ遅いほど、圧縮した方が早いんですよね。帯域を長く使うとメモリみんなに迷惑かかりますし。情報ありがとうございました。

comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

秀丸マクロがおもしろくて練習のため2つのマクロを作ってみた

秀丸マクロは、以下のようにキーボード操作の結果を記録して再生することはやっていた。 Shift+F1:キー操作の記録開始/終了 Shift+F2:キー操作の再生 テキストファイル1行分のテキスト編集操 …

PDFアレコレはこんなところが落としどころかね

この3連休はPDFiumを使ったサンプルアプリ作成に取り組んでいて、まぁそこそこの感じにできあがったのでここらでいったん完成としておく。

no image

BMPをJPEGに

ビットマップ(BMP)ファイルをJPEGファイルに変換できないものか。 そんなテーマが頭の中で渦巻いていた。 既存のアプリ(フリーソフトなど)を使えば簡単だが、 プログラム的にやるとなると、なかなか。 …

no image

IS2008

「InstallShield おまえもか!」 まだ2007年だというのに、ソフト名に来年の年号を使う。 AutoCADがはじめたと思われる悪習。 (Windows Server 2008は、まだBet …

zipcopy Ver1.04リリース

zipcopyをリビジョンアップして、Ver1.04とした。 Ver1.02からなので2回リビジョンアップしている。詳細は以下の通り。 Ver1.03 2019/9/26 ・ファイル削除時の例外エラー …