CAD日記

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

ソフト開発

C#でzip圧縮と解凍したりasync/awaitで非同期処理をするソースコード公開

投稿日:

zipcopyという名の開発プロジェクトはここらで終わりにしようと思い至ったので、そのソースコードを公開する。
zipcopyのソースコード
開発環境はVisualStudio 2017 C#で、NuGetでDotNetZipを組み込んだプロジェクト一式。
DotNetZipは一応組み込んでみただけで、メインは別口でインストールした7zipのプログラムを呼び出して使うほうだ。

ただ公開してもつまらないので、ポイントを以下で明らかにする。
まずはzipcopyがどんなアプリなのか。

コピー元のフォルダを選択、コピー先のフォルダを選択して、実行ってやれば、コピー元でzip圧縮した結果をコピー先にコピーしてくれるってもの。ネットワークのフォルダ共有の場合、圧縮してコピーしたほうが帯域制御になって、かつ速い場合もあるんじゃないかと思って作ったものだが、その当初の発想はかなりまちがっていたことがわかったので、その点は参考にならないかな。。

【ポイント1:7zipの圧縮/解凍はGUIからやるだけでなく、CUIのインターフェースが公開されている】
C:\Program Files\7-Zipの中にある7zG.exeがそうで、以下のコマンドラインを実行してやれば圧縮解凍できる。
7zG.exe a [圧縮後ファイル] [圧縮元フォルダ] ※詳細はCompress関数を参照
7zG.exe x -y -o [解凍先フォルダ] [解凍する圧縮ファイル] 詳細はExtract関数を参照
CompressおよびExtract関数内では、DotNetZipによる圧縮解凍もしているので参考にされたし。

【ポイント2:時間のかかる処理はasync/awaitで非同期とすべし】
同期処理で時間がかかる処理(10秒以上)をやらせると、自分が応答なしの状態になるので気持ち悪い。非同期で時間がかかる処理をやらせておいて、自分はクローズできない状態に制御しておけば、GUI操作で自分と呼び出し先の処理を行ったり来たりできていい感じになる。以下、実行ボタンを押したときの処理。asyncとawaitの使い方の参考になるかな。

呼び出し先から呼び出し元のコントロールをいじる際は注意が必要で、delegate宣言した関数としておく。以下は、圧縮などの実行経過を自分のリストビューにログとして追加する処理。

その他ポイントは、以下に箇条書きで書いておくので、詳細はソースコードの中から見つけてくれ。カッコ内は関数名。
・zipのように巨大なファイルは削除できるまでに時間がかかる場合があるので、少し時間をおいてからリトライすべし(FileDelete)
・処理時間を計測するならStopwatchでStart&Stopすべし(timeStart、timeEnd)
・エクスプローラの右クリックメニュに追加・削除するのはレジストリ操作で可能(button5_Click、button6_Click)
・ファイル選択でフォルダ選択することだってできるのよ(button1_Click)
・ファイルコピーは、コピー中のGUI画面を出すことができるのさ(CopyFile)

-ソフト開発

執筆者:


comment

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

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

関連記事

Teigha改めODAでDWGをDXFに変換するプログラムをつくってみよう!【Part.1】

Teigha改めODA(Open Design Alliance)は有料のライブラリー。商用利用するならば、最低でも年間1500ドル(初年度2000ドル)を要する。この場合、配布本数が100本に限られ …

扱えるテキストファイルの最大行数は1億行

扱えるテキストファイルの行数の限界が1億行なのが秀丸エディター。その他⇒動作環境⇒環境にて、編集可能な最大行数が10万行~1億行で設定できる(32bitの場合は1000万行まで)。1億行のテキストファ …

WinMegeのフィルタについて今すぐ知りたいならココを読め

WinMergeでフォルダやファイルを比較して差分を把握することは、プログラムに関わっていれば日常あること。効率よく比較したいならフィルタを使うべし。

no image

デバイスコンテキスト

デバイスコンテキストとは何かを調べてみた。 Device Context=装置の状況。直訳すると意味わからん。状況という言葉があいまいで、背景・場面・状況・文脈という意味があるが、やっぱわからないこと …

no image

いたちごっこ3

開発者の考えた対策は空しく敗れ、3度目の戦いが始まるところから話は始まります。 ●3度目のクラック 開発者の考えたトラップに、クラッカーは見事に”はまって”くれました。でも、依 …