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

com へ返信する コメントをキャンセル

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

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

関連記事

no image

ベクタープロレジ大賞

Vectorがやってる、もっとも人気のあったダウンロードソフトを決める賞です。 Vectorと言えば、フリーウェアやシェアウェアをダウンロードできるところで一番有名なところです。窓の杜というところもあ …

no image

x64

Windowsの64ビット動作って、まだまだ先ですかね、という話をしてみます。  コンピュータが16ビットだった時代、私はこの業界に入りました。正確に言うと、CPUは32ビットになっていたが、その上で …

PDFアレコレにページ抽出機能を追加して独自アイコンも組み込んだ

PDFアレコレに念願のページ抽出機能を追加した。ページの操作っていうのはPDF編集においてキモだ。ページの回転を考慮した編集操作が必要だからけっこう苦労しちゃった。変更点は以下の通り。 Ver2.06 …

高速なPDFビューアをC#とPDFiumでサクっと作ってみよう!

どんなPDFビューアを作ったのかというと、こんなモノ。 開いたPDFがCADの図面っぽいが、れっきとしたPDFファイルであり、ベクトル情報をちゃんと表現しているかを明らかにしたかったので使ったデータ。 …

最小化したウインドウの位置を保存して復元するとまずい話(C++編)

ウインドウを最小化した状態としてタスクバーから右クリックして閉じるってやると、次回ウインドウを起動したときに画面外に出てしまって、操作不能になるアプリがある。そんなときは、タスクバーの上にカーソルを置 …