【C#】7zip を使って圧縮ファイルを展開する
おはようございます。
前回に引き続き「7zip」を利用して、圧縮したファイルを展開してみます。
プログラムは前回のものを流用します。
スポンサーリンク
プログラムの修正
ライブラリ使用宣言の追加
ファイルの情報取得
using System.Diagnostics;
新規メソッドの追加
ファイルを展開する処理を追加します。
/// <summary> /// 圧縮ファイルを展開します. /// </summary> /// <param name="filePath"></param> /// <returns></returns> private int FileExpansion(string filePath, string outputDir) { // 長いパスを短くする IntPtr hWnd = this.Handle; StringBuilder strShortPath = new StringBuilder(1024); GetShortPathName(filePath, strShortPath, 1024); // 指定したディレクトリにフォルダ構成を保持した形で出力 string strCommandLine = "x " + strShortPath.ToString() + " -o" + outputDir; StringBuilder strOutPut = new StringBuilder(1024); int ret = SevenZip(hWnd, strCommandLine, strOutPut, 1024); return ret; }
展開ボタンクリック時のイベント
画面に追加した「展開」ボタンをクリックした際のイベントを追加します。
/// <summary> /// 展開ボタンクリックイベント /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnExpansion_Click(object sender, EventArgs e) { int count = 0; // 選択されたファイルを解凍 var selectedItems = listView1.SelectedItems; foreach (ListViewItem item in selectedItems) { // ファイルの情報を取得 FileInfo fi = new FileInfo(item.Name); FileVersionInfo vi = FileVersionInfo.GetVersionInfo(item.Name); // shell32で取得 string type = ""; SHFILEINFO shinfo = new SHFILEINFO(); IntPtr hSuccess = SHGetFileInfo(item.Name, 0, out shinfo, (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 + "を展開します。", "展開処理"); int ret = FileExpansion(item.Name, fi.FullName.Replace(fi.Extension, "")); if (ret != 0) { MessageBox.Show(item.Name + "の展開に失敗しました。", "展開処理"); } count++; } } // 展開を実行したかどうかでメッセージを変更 if (count == 0) { MessageBox.Show("展開する対象が存在しません。", "展開処理"); } else { MessageBox.Show("ファイルの展開が完了しました。", "展開処理"); } }
起動してみる
前回の記事で圧縮したファイルを選択して、下のリストに追加します。
「展開」ボタンをクリックします。
展開中のプログレスダイアログも表示されます。
メッセージが表示されれば完了です。
まとめ
ひとまず、圧縮・展開までをやってみました。
色々オプションなんかもあるので、試してみたいと思います。
次回は自己解凍形式の実行ファイルを作成してみます。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません