【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("ファイルの展開が完了しました。","展開処理");                 }             } | 
起動してみる

前回の記事で圧縮したファイルを選択して、下のリストに追加します。

「展開」ボタンをクリックします。

展開中のプログレスダイアログも表示されます。

メッセージが表示されれば完了です。
まとめ
ひとまず、圧縮・展開までをやってみました。
色々オプションなんかもあるので、試してみたいと思います。
次回は自己解凍形式の実行ファイルを作成してみます。
ではでは。


 https://www.doraxdora.com/blog/2018/02/04/post-3838/
 https://www.doraxdora.com/blog/2018/02/04/post-3838/








ディスカッション
コメント一覧
まだ、コメントがありません