前回に引き続き「7zip」を利用して、圧縮したファイルを展開してみます。
プログラムは前回のものを流用します。
【C#】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("ファイルの展開が完了しました。", "展開処理");
}
}
前回の記事で圧縮したファイルを選択して、下のリストに追加します。
「展開」ボタンをクリックします。
展開中のプログレスダイアログも表示されます。
メッセージが表示されれば完了です。
ひとまず、圧縮・展開までをやってみました。
色々オプションなんかもあるので、試してみたいと思います。
次回は自己解凍形式の実行ファイルを作成してみます。
ではでは。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント