【C#】7zip を使って圧縮ファイルを展開する
おはようございます。
前回に引き続き「7zip」を利用して、圧縮したファイルを展開してみます。
プログラムは前回のものを流用します。
スポンサーリンク
プログラムの修正
ライブラリ使用宣言の追加
ファイルの情報取得
1 | usingSystem.Diagnostics; |
新規メソッドの追加
ファイルを展開する処理を追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /// <summary> /// 圧縮ファイルを展開します. /// </summary> /// <param name="filePath"></param> /// <returns></returns> privateintFileExpansion(stringfilePath,stringoutputDir) { // 長いパスを短くする IntPtr hWnd=this.Handle; StringBuilder strShortPath=newStringBuilder(1024); GetShortPathName(filePath,strShortPath,1024); // 指定したディレクトリにフォルダ構成を保持した形で出力 stringstrCommandLine="x "+strShortPath.ToString()+" -o"+outputDir; StringBuilder strOutPut=newStringBuilder(1024); intret=SevenZip(hWnd,strCommandLine,strOutPut,1024); returnret; } |
展開ボタンクリック時のイベント
画面に追加した「展開」ボタンをクリックした際のイベントを追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | /// <summary> /// 展開ボタンクリックイベント /// </summary> /// <param name="sender"></param> /// <param name="e"></param> privatevoidbtnExpansion_Click(objectsender,EventArgse) { intcount=0; // 選択されたファイルを解凍 varselectedItems=listView1.SelectedItems; foreach(ListViewItem item inselectedItems) { // ファイルの情報を取得 FileInfo fi=newFileInfo(item.Name); FileVersionInfo vi=FileVersionInfo.GetVersionInfo(item.Name); // shell32で取得 stringtype=""; SHFILEINFO shinfo=newSHFILEINFO(); IntPtr hSuccess=SHGetFileInfo(item.Name,0,outshinfo,(uint)Marshal.SizeOf(shinfo),SHGFI_ICON|SHGFI_LARGEICON|SHGFI_SMALLICON|SHGFI_SYSICONINDEX|SHGFI_TYPENAME); if(hSuccess!=IntPtr.Zero) { type=shinfo.szTypeName; } // 圧縮ファイルの判定 // shll32、FileInfo、FileVersionInfoなどから判定できる //if (type.IndexOf("圧縮") > -1 || type.IndexOf("7z") > -1) //if (vi.FileDescription.IndexOf("7Z") > -1) // FileInfoのAttributesで判定 if(fi.Attributes==FileAttributes.Archive) { MessageBox.Show(item.Name+"を展開します。","展開処理"); intret=FileExpansion(item.Name,fi.FullName.Replace(fi.Extension,"")); if(ret!=0) { MessageBox.Show(item.Name+"の展開に失敗しました。","展開処理"); } count++; } } // 展開を実行したかどうかでメッセージを変更 if(count==0) { MessageBox.Show("展開する対象が存在しません。","展開処理"); } else { MessageBox.Show("ファイルの展開が完了しました。","展開処理"); } } |
起動してみる
前回の記事で圧縮したファイルを選択して、下のリストに追加します。
「展開」ボタンをクリックします。
展開中のプログレスダイアログも表示されます。
メッセージが表示されれば完了です。
まとめ
ひとまず、圧縮・展開までをやってみました。
色々オプションなんかもあるので、試してみたいと思います。
次回は自己解凍形式の実行ファイルを作成してみます。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません