DoboWiki
Top
> .NETプログラミング研究/94 をテンプレートにして作成
.NETプログラミング研究/94 をテンプレートにして作成
開始行:
#title(DotNetZip(Ionic Zip Library)を使ってZIP書庫を展...
#navi(.NETプログラミング研究)
#contents
*DotNetZip(Ionic Zip Library)を使ってZIP書庫を展開する ...
[[前回>../83]]はDotNetZipを使ってZIP書庫を作成する方法を...
**ZIP書庫を展開する基本的な方法 [#mb071cd6]
ZIP書庫を展開する基本的な手順は、次のようになります。
+ZipFile.Readメソッドを使ってZipFileオブジェクトを作成す...
+For Each(foreach)やインデクサを使って、展開したいファイ...
+ZipEntry.Extractメソッドでファイルを展開する。なお、展開...
このような方法でZIP書庫内のすべてのファイルを展開する例を...
#code(vbnet){{
'展開するZIP書庫のパス
Dim zipPath As String = "C:\test.zip"
'展開先のフォルダのパス
Dim folderPath As String = "C:\temp"
'ZipFileを作成する
Using zip As Ionic.Zip.ZipFile = Ionic.Zip.ZipFile.Read( _
zipPath, System.Text.Encoding.GetEncoding("shift_jis"))
'パスワードが設定されているときは、
'zip.Password = "password"
'または、ZipEntry.ExtractWithPasswordメソッドで展開す...
'展開先に同名のファイルがあれば上書きする
zip.ExtractExistingFile = _
Ionic.Zip.ExtractExistingFileAction.OverwriteSile...
'DoNotOverwriteで上書きしない。Throwで例外をスロー。...
'ZipEntry.Extractに指定して展開することもできる
'フォルダ構造を無視する
'zip.FlattenFoldersOnExtract = True
'ZIP書庫内のエントリを取得
For Each entry As Ionic.Zip.ZipEntry In zip
'エントリを展開する
entry.Extract(folderPath)
Next
End Using
}}
#code(csharp){{
//展開するZIP書庫のパス
string zipPath = @"C:\test.zip";
//展開先のフォルダのパス
string folderPath = @"C:\temp";
//ZipFileを作成する
using (Ionic.Zip.ZipFile zip = Ionic.Zip.ZipFile.Read(
zipPath, System.Text.Encoding.GetEncoding("shift_jis"...
{
//パスワードが設定されているときは、
//zip.Password = "password";
//または、ZipEntry.ExtractWithPasswordメソッドで展開...
//展開先に同名のファイルがあれば上書きする
zip.ExtractExistingFile =
Ionic.Zip.ExtractExistingFileAction.OverwriteSile...
//DoNotOverwriteで上書きしない。Throwで例外をスロー。...
//ZipEntry.Extractに指定して展開することもできる
//フォルダ構造を無視する
//zip.FlattenFoldersOnExtract = true;
//ZIP書庫内のエントリを取得
foreach (Ionic.Zip.ZipEntry entry in zip)
{
//エントリを展開する
entry.Extract(folderPath);
}
}
}}
補足:ZIP書庫内のすべてのファイルを展開するには、ZipFile....
ZipFile.Readメソッドでなく、ZipFileのコンストラクタでも、...
ただし、UseUnicodeAsNecessaryをtrueにして作成した書庫のフ...
残念ながら、私の試した限りでは、Readメソッドで文字コード...
***1つのファイルを展開する [#o310d5cf]
ZipFileのインデクサを使えば、エントリ名をキーにしてZipEnt...
#code(vbnet){{
Using zip As Ionic.Zip.ZipFile = Ionic.Zip.ZipFile.Read( _
"C:\test.zip", System.Text.Encoding.GetEncoding("shif...
'"readme.txt"のZipEntryを取得する
'見つからなかったときはNothingを返す
Dim entry As Ionic.Zip.ZipEntry = zip("readme.txt")
'エントリを展開する
entry.Extract("C:\temp")
End Using
}}
#code(csharp){{
//ZipFileを作成する
using (Ionic.Zip.ZipFile zip = Ionic.Zip.ZipFile.Read(
@"C:\test.zip", System.Text.Encoding.GetEncoding("shi...
{
//"readme.txt"のZipEntryを取得する
//見つからなかったときはnullを返す
Ionic.Zip.ZipEntry entry = zip["readme.txt"];
//エントリを展開する
entry.Extract(@"C:\temp");
}
}}
***特定のファイルのみを展開する [#z2ad7c80]
[[前回>../83]]の特定のファイルのみを圧縮する方法で紹介し...
ExtractSelectedEntriesメソッドの1番目のパラメータであるse...
以下に、拡張子が".txt"のファイルのみを展開する例を示しま...
#code(vbnet){{
'展開するZIP書庫のパス
Dim zipPath As String = "C:\test.zip"
'展開するファイルの定義
Dim selectionCriteria As String = "*.txt"
'展開するファイルが存在する書庫内のフォルダのパス
Dim directoryPathInArchive As String = Nothing
'展開先のフォルダのパス
Dim extractDirectory As String = "C:\temp"
'展開したファイルが既に存在していた時どうするか
Dim extractExistingFile As Ionic.Zip.ExtractExistingFileA...
Ionic.Zip.ExtractExistingFileAction.DoNotOverwrite
'ZipFileを作成する
Using zip As Ionic.Zip.ZipFile = Ionic.Zip.ZipFile.Read( _
zipPath, System.Text.Encoding.GetEncoding("shift_jis"))
'指定したファイルだけを展開する
zip.ExtractSelectedEntries(selectionCriteria, directo...
extractDirectory, extractE...
End Using
}}
#code(csharp){{
//展開するZIP書庫のパス
string zipPath = @"C:\test.zip";
//展開するファイルの定義
string selectionCriteria = @"*.txt";
//展開するファイルが存在する書庫内のフォルダのパス
string directoryPathInArchive = null;
//展開先のフォルダのパス
string extractDirectory = @"C:\temp";
//展開したファイルが既に存在していた時どうするか
Ionic.Zip.ExtractExistingFileAction extractExistingFile =
Ionic.Zip.ExtractExistingFileAction.DoNotOverwrite;
//ZipFileを作成する
using (Ionic.Zip.ZipFile zip = Ionic.Zip.ZipFile.Read(
zipPath, System.Text.Encoding.GetEncoding("shift_jis"...
{
//指定したファイルだけを展開する
zip.ExtractSelectedEntries(selectionCriteria, directo...
extractDirectory, extractExistingFile);
}
}}
**圧縮、展開時に進行状況を表示する [#a43b1e6b]
ZIP書庫を作成するときに進行状況を表示するには、SaveProgre...
ZIP書庫を展開するときは、ExtractProgressイベントで進行状...
ZipFileクラスにはこれらのイベント以外に、AddProgressとZip...
補足:AddProgressイベントハンドラでAddProgressEventArgs.C...
SaveProgressとExtractProgressイベントを使って、圧縮、展開...
#code(vbnet){{
'書庫を作成する
Private Sub Button1_Click(ByVal sender As Object, ByVal e...
Handles Button1.Click
Using zip As New Ionic.Zip.ZipFile( _
System.Text.Encoding.GetEncoding("shift_jis"))
'SaveProgressイベントハンドラを追加する
AddHandler zip.SaveProgress, AddressOf Me.zip_Sav...
'フォルダを追加する
zip.AddDirectory("C:\doc")
'ZIP書庫を作成する
zip.Save("C:\test.zip")
End Using
End Sub
'書庫を展開する
Private Sub Button2_Click(ByVal sender As Object, ByVal e...
Handles Button2.Click
Using zip As Ionic.Zip.ZipFile = Ionic.Zip.ZipFile.Re...
"C:\test.zip", System.Text.Encoding.GetEncoding("...
'ExtractProgressイベントハンドラを追加する
AddHandler zip.ExtractProgress, AddressOf Me.zip_...
'すべてのファイルを展開する
zip.ExtractAll("C:\temp", _
Ionic.Zip.ExtractExistingFileActio...
End Using
End Sub
'SaveProgressイベントハンドラ
Private Sub zip_SaveProgress(ByVal sender As Object, _
ByVal e As Ionic.Zip.SavePro...
If e.EventType = _
Ionic.Zip.ZipProgressEventType.Saving_Started Then
'書庫の作成を開始
Console.WriteLine("{0} の作成開始", e.ArchiveName)
ElseIf e.EventType = _
Ionic.Zip.ZipProgressEventType.Saving_BeforeWrite...
'エントリの書き込み開始
Console.WriteLine("{0} の書き込み開始", e.Current...
ElseIf e.EventType = _
Ionic.Zip.ZipProgressEventType.Saving_EntryBytesR...
'エントリを書き込み中
Console.WriteLine("{0}/{1} バイト 書き込みました"...
e.BytesTransferred, e.TotalByte...
'e.Cancel = True
'とすると、書庫の作成が中止される
ElseIf e.EventType = _
Ionic.Zip.ZipProgressEventType.Saving_AfterWriteE...
'エントリの書き込み終了
Console.WriteLine("{0} の書き込み終了", e.Current...
Console.WriteLine("{0} 個中 {1} 個のエントリの書...
e.EntriesTotal, e.EntriesSaved)
ElseIf e.EventType = _
Ionic.Zip.ZipProgressEventType.Saving_Completed T...
'書庫の作成が完了
Console.WriteLine("{0} の作成終了", e.ArchiveName)
End If
End Sub
'ExtractProgressイベントハンドラ
Private Sub zip_ExtractProgress(ByVal sender As Object, _
ByVal e As Ionic.Zip.Extr...
If e.EventType = _
Ionic.Zip.ZipProgressEventType.Extracting_BeforeE...
'エントリの展開を開始
Console.WriteLine("{0} の展開を開始", e.CurrentEn...
Console.WriteLine("展開先:{0}", e.ExtractLocation)
ElseIf e.EventType = _
Ionic.Zip.ZipProgressEventType.Extracting_EntryBy...
'エントリを展開中
Console.WriteLine("{0}/{1} バイト展開しました", _
e.BytesTransferred, e.TotalByte...
ElseIf e.EventType = _
Ionic.Zip.ZipProgressEventType.Extracting_AfterEx...
'エントリの展開が終了
Console.WriteLine("{0} の展開が終了", e.CurrentEn...
End If
End Sub
}}
#code(csharp){{
//書庫を作成する
private void Button1_Click(object sender, EventArgs e)
{
using (Ionic.Zip.ZipFile zip =
new Ionic.Zip.ZipFile(System.Text.Encoding.GetEnc...
{
//SaveProgressイベントハンドラを追加する
zip.SaveProgress += this.zip_SaveProgress;
//フォルダを追加する
zip.AddDirectory(@"C:\doc");
//ZIP書庫を作成する
zip.Save(@"C:\test.zip");
}
}
//書庫を展開する
private void Button2_Click(object sender, EventArgs e)
{
using (Ionic.Zip.ZipFile zip = Ionic.Zip.ZipFile.Read(
@"C:\test.zip", System.Text.Encoding.GetEncoding(...
{
//ExtractProgressイベントハンドラを追加する
zip.ExtractProgress += this.zip_ExtractProgress;
//すべてのファイルを展開する
zip.ExtractAll(@"C:\temp",
Ionic.Zip.ExtractExistingFileAction.Overwrite...
}
}
//SaveProgressイベントハンドラ
private void zip_SaveProgress(
object sender, Ionic.Zip.SaveProgressEventArgs e)
{
if (e.EventType ==
Ionic.Zip.ZipProgressEventType.Saving_Started)
{
//書庫の作成を開始
Console.WriteLine("{0} の作成開始", e.ArchiveName);
}
else if (e.EventType ==
Ionic.Zip.ZipProgressEventType.Saving_BeforeWrite...
{
//エントリの書き込み開始
Console.WriteLine("{0} の書き込み開始", e.Current...
}
else if (e.EventType ==
Ionic.Zip.ZipProgressEventType.Saving_EntryBytesR...
{
//エントリを書き込み中
Console.WriteLine("{0}/{1} バイト 書き込みました",
e.BytesTransferred, e.TotalBytesToTransfer);
//e.Cancel = true;
//とすると、書庫の作成が中止される
}
else if (e.EventType ==
Ionic.Zip.ZipProgressEventType.Saving_AfterWriteE...
{
//エントリの書き込み終了
Console.WriteLine("{0} の書き込み終了", e.Current...
Console.WriteLine("{0} 個中 {1} 個のエントリの書...
e.EntriesTotal, e.EntriesSaved);
}
else if (e.EventType ==
Ionic.Zip.ZipProgressEventType.Saving_Completed)
{
//書庫の作成が完了
Console.WriteLine("{0} の作成終了", e.ArchiveName);
}
}
//ExtractProgressイベントハンドラ
private void zip_ExtractProgress(
object sender, Ionic.Zip.ExtractProgressEventArgs e)
{
if (e.EventType ==
Ionic.Zip.ZipProgressEventType.Extracting_BeforeE...
{
//エントリの展開を開始
Console.WriteLine("{0} の展開を開始", e.CurrentEn...
Console.WriteLine("展開先:{0}", e.ExtractLocation);
}
else if (e.EventType ==
Ionic.Zip.ZipProgressEventType.Extracting_EntryBy...
{
//エントリを展開中
Console.WriteLine("{0}/{1} バイト展開しました",
e.BytesTransferred, e.TotalBytesToTransfer);
}
else if (e.EventType ==
Ionic.Zip.ZipProgressEventType.Extracting_AfterEx...
{
//エントリの展開が終了
Console.WriteLine("{0} の展開が終了", e.CurrentEn...
}
}
}}
**展開したファイルを上書きするかユーザーに問い合わせる [#...
デフォルトでは、展開先に同名のファイルが存在すると例外が...
もしファイルを上書きするかユーザーに問い合わせるようにす...
さらに、ExtractProgressEventArgs.Cancelプロパティをtrueに...
上書きするかをメッセージボックスでユーザーに問い合わせ、...
#code(vbnet){{
'Button1のClickイベントハンドラ
Private Sub Button1_Click(ByVal sender As Object, ByVal e...
Handles Button1.Click
'書庫を展開する
Using zip As Ionic.Zip.ZipFile = Ionic.Zip.ZipFile.Re...
"C:\test.zip", System.Text.Encoding.GetEncoding("...
'ExtractProgressイベントハンドラを追加する
AddHandler zip.ExtractProgress, AddressOf Me.zip_...
'ExtractProgressイベントで上書きするか指定できる...
zip.ExtractExistingFile = _
Ionic.Zip.ExtractExistingFileAction.InvokeExt...
'すべてのファイルを展開する
zip.ExtractAll("C:\temp")
End Using
End Sub
'ExtractProgressイベントハンドラ
Private Sub zip_ExtractProgress(ByVal sender As Object, _
ByVal e As Ionic.Zip.Extr...
If e.EventType = _
Ionic.Zip.ZipProgressEventType.Extracting_Extract...
'展開するファイル名
Dim filePath As String = System.IO.Path.Combine( _
e.ExtractLocation, e.CurrentEntry.FileName.Re...
'ダイアログを表示する
Dim res As DialogResult = MessageBox.Show(Me, _
"'" & filePath & "'はすでに存在します。" & vb...
"'はい'で上書き 'いいえ'で何もしない 'キ...
"上書きの確認", _
MessageBoxButtons.YesNoCancel, _
MessageBoxIcon.Question)
If res = DialogResult.Yes Then
'上書きする
e.CurrentEntry.ExtractExistingFile = _
Ionic.Zip.ExtractExistingFileAction.Overw...
ElseIf res = DialogResult.No Then
'上書きしない
e.CurrentEntry.ExtractExistingFile = _
Ionic.Zip.ExtractExistingFileAction.DoNot...
ElseIf res = DialogResult.Cancel Then
'展開を中止する
e.Cancel = True
End If
End If
End Sub
}}
#code(csharp){{
//Button1のClickイベントハンドラ
private void Button1_Click(object sender, EventArgs e)
{
//書庫を展開する
using (Ionic.Zip.ZipFile zip = Ionic.Zip.ZipFile.Read(
@"C:\test.zip", System.Text.Encoding.GetEncoding(...
{
//ExtractProgressイベントハンドラを追加する
zip.ExtractProgress += zip_ExtractProgress;
//ExtractProgressイベントで上書きするか指定できる...
zip.ExtractExistingFile =
Ionic.Zip.ExtractExistingFileAction.InvokeExt...
//すべてのファイルを展開する
zip.ExtractAll(@"C:\temp");
}
}
//ExtractProgressイベントハンドラ
private void zip_ExtractProgress(
object sender, Ionic.Zip.ExtractProgressEventArgs e)
{
if (e.EventType ==
Ionic.Zip.ZipProgressEventType.Extracting_Extract...
{
//展開するファイル名
string filePath = System.IO.Path.Combine(
e.ExtractLocation, e.CurrentEntry.FileName.Re...
//ダイアログを表示する
DialogResult res = MessageBox.Show(this,
"'" + filePath + "'はすでに存在します。\n" +
"'はい'で上書き 'いいえ'で何もしない 'キ...
"上書きの確認",
MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Question);
if (res == DialogResult.Yes)
{
//上書きする
e.CurrentEntry.ExtractExistingFile =
Ionic.Zip.ExtractExistingFileAction.Overw...
}
else if (res == DialogResult.No)
{
//上書きしない
e.CurrentEntry.ExtractExistingFile =
Ionic.Zip.ExtractExistingFileAction.DoNot...
}
else if (res == DialogResult.Cancel)
{
//展開を中止する
e.Cancel = true;
}
}
}
}}
**コメント [#d0894924]
- 参考にさせていただきありがとうございます。 -- oo &new{2...
- 質問があるのですが、プログレスバーで進捗状況を表示しな...
- パスワードのプロパティの設定順序気づかなかったので助か...
- 読み取り専用ファイルの圧縮でエラーが出ます。対処方法を...
- バージョンの問題でしょうか? Ionic.Zip.ZipFile.Readの...
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2009-12-15 (火) 01:13:27,DOB...
終了行:
#title(DotNetZip(Ionic Zip Library)を使ってZIP書庫を展...
#navi(.NETプログラミング研究)
#contents
*DotNetZip(Ionic Zip Library)を使ってZIP書庫を展開する ...
[[前回>../83]]はDotNetZipを使ってZIP書庫を作成する方法を...
**ZIP書庫を展開する基本的な方法 [#mb071cd6]
ZIP書庫を展開する基本的な手順は、次のようになります。
+ZipFile.Readメソッドを使ってZipFileオブジェクトを作成す...
+For Each(foreach)やインデクサを使って、展開したいファイ...
+ZipEntry.Extractメソッドでファイルを展開する。なお、展開...
このような方法でZIP書庫内のすべてのファイルを展開する例を...
#code(vbnet){{
'展開するZIP書庫のパス
Dim zipPath As String = "C:\test.zip"
'展開先のフォルダのパス
Dim folderPath As String = "C:\temp"
'ZipFileを作成する
Using zip As Ionic.Zip.ZipFile = Ionic.Zip.ZipFile.Read( _
zipPath, System.Text.Encoding.GetEncoding("shift_jis"))
'パスワードが設定されているときは、
'zip.Password = "password"
'または、ZipEntry.ExtractWithPasswordメソッドで展開す...
'展開先に同名のファイルがあれば上書きする
zip.ExtractExistingFile = _
Ionic.Zip.ExtractExistingFileAction.OverwriteSile...
'DoNotOverwriteで上書きしない。Throwで例外をスロー。...
'ZipEntry.Extractに指定して展開することもできる
'フォルダ構造を無視する
'zip.FlattenFoldersOnExtract = True
'ZIP書庫内のエントリを取得
For Each entry As Ionic.Zip.ZipEntry In zip
'エントリを展開する
entry.Extract(folderPath)
Next
End Using
}}
#code(csharp){{
//展開するZIP書庫のパス
string zipPath = @"C:\test.zip";
//展開先のフォルダのパス
string folderPath = @"C:\temp";
//ZipFileを作成する
using (Ionic.Zip.ZipFile zip = Ionic.Zip.ZipFile.Read(
zipPath, System.Text.Encoding.GetEncoding("shift_jis"...
{
//パスワードが設定されているときは、
//zip.Password = "password";
//または、ZipEntry.ExtractWithPasswordメソッドで展開...
//展開先に同名のファイルがあれば上書きする
zip.ExtractExistingFile =
Ionic.Zip.ExtractExistingFileAction.OverwriteSile...
//DoNotOverwriteで上書きしない。Throwで例外をスロー。...
//ZipEntry.Extractに指定して展開することもできる
//フォルダ構造を無視する
//zip.FlattenFoldersOnExtract = true;
//ZIP書庫内のエントリを取得
foreach (Ionic.Zip.ZipEntry entry in zip)
{
//エントリを展開する
entry.Extract(folderPath);
}
}
}}
補足:ZIP書庫内のすべてのファイルを展開するには、ZipFile....
ZipFile.Readメソッドでなく、ZipFileのコンストラクタでも、...
ただし、UseUnicodeAsNecessaryをtrueにして作成した書庫のフ...
残念ながら、私の試した限りでは、Readメソッドで文字コード...
***1つのファイルを展開する [#o310d5cf]
ZipFileのインデクサを使えば、エントリ名をキーにしてZipEnt...
#code(vbnet){{
Using zip As Ionic.Zip.ZipFile = Ionic.Zip.ZipFile.Read( _
"C:\test.zip", System.Text.Encoding.GetEncoding("shif...
'"readme.txt"のZipEntryを取得する
'見つからなかったときはNothingを返す
Dim entry As Ionic.Zip.ZipEntry = zip("readme.txt")
'エントリを展開する
entry.Extract("C:\temp")
End Using
}}
#code(csharp){{
//ZipFileを作成する
using (Ionic.Zip.ZipFile zip = Ionic.Zip.ZipFile.Read(
@"C:\test.zip", System.Text.Encoding.GetEncoding("shi...
{
//"readme.txt"のZipEntryを取得する
//見つからなかったときはnullを返す
Ionic.Zip.ZipEntry entry = zip["readme.txt"];
//エントリを展開する
entry.Extract(@"C:\temp");
}
}}
***特定のファイルのみを展開する [#z2ad7c80]
[[前回>../83]]の特定のファイルのみを圧縮する方法で紹介し...
ExtractSelectedEntriesメソッドの1番目のパラメータであるse...
以下に、拡張子が".txt"のファイルのみを展開する例を示しま...
#code(vbnet){{
'展開するZIP書庫のパス
Dim zipPath As String = "C:\test.zip"
'展開するファイルの定義
Dim selectionCriteria As String = "*.txt"
'展開するファイルが存在する書庫内のフォルダのパス
Dim directoryPathInArchive As String = Nothing
'展開先のフォルダのパス
Dim extractDirectory As String = "C:\temp"
'展開したファイルが既に存在していた時どうするか
Dim extractExistingFile As Ionic.Zip.ExtractExistingFileA...
Ionic.Zip.ExtractExistingFileAction.DoNotOverwrite
'ZipFileを作成する
Using zip As Ionic.Zip.ZipFile = Ionic.Zip.ZipFile.Read( _
zipPath, System.Text.Encoding.GetEncoding("shift_jis"))
'指定したファイルだけを展開する
zip.ExtractSelectedEntries(selectionCriteria, directo...
extractDirectory, extractE...
End Using
}}
#code(csharp){{
//展開するZIP書庫のパス
string zipPath = @"C:\test.zip";
//展開するファイルの定義
string selectionCriteria = @"*.txt";
//展開するファイルが存在する書庫内のフォルダのパス
string directoryPathInArchive = null;
//展開先のフォルダのパス
string extractDirectory = @"C:\temp";
//展開したファイルが既に存在していた時どうするか
Ionic.Zip.ExtractExistingFileAction extractExistingFile =
Ionic.Zip.ExtractExistingFileAction.DoNotOverwrite;
//ZipFileを作成する
using (Ionic.Zip.ZipFile zip = Ionic.Zip.ZipFile.Read(
zipPath, System.Text.Encoding.GetEncoding("shift_jis"...
{
//指定したファイルだけを展開する
zip.ExtractSelectedEntries(selectionCriteria, directo...
extractDirectory, extractExistingFile);
}
}}
**圧縮、展開時に進行状況を表示する [#a43b1e6b]
ZIP書庫を作成するときに進行状況を表示するには、SaveProgre...
ZIP書庫を展開するときは、ExtractProgressイベントで進行状...
ZipFileクラスにはこれらのイベント以外に、AddProgressとZip...
補足:AddProgressイベントハンドラでAddProgressEventArgs.C...
SaveProgressとExtractProgressイベントを使って、圧縮、展開...
#code(vbnet){{
'書庫を作成する
Private Sub Button1_Click(ByVal sender As Object, ByVal e...
Handles Button1.Click
Using zip As New Ionic.Zip.ZipFile( _
System.Text.Encoding.GetEncoding("shift_jis"))
'SaveProgressイベントハンドラを追加する
AddHandler zip.SaveProgress, AddressOf Me.zip_Sav...
'フォルダを追加する
zip.AddDirectory("C:\doc")
'ZIP書庫を作成する
zip.Save("C:\test.zip")
End Using
End Sub
'書庫を展開する
Private Sub Button2_Click(ByVal sender As Object, ByVal e...
Handles Button2.Click
Using zip As Ionic.Zip.ZipFile = Ionic.Zip.ZipFile.Re...
"C:\test.zip", System.Text.Encoding.GetEncoding("...
'ExtractProgressイベントハンドラを追加する
AddHandler zip.ExtractProgress, AddressOf Me.zip_...
'すべてのファイルを展開する
zip.ExtractAll("C:\temp", _
Ionic.Zip.ExtractExistingFileActio...
End Using
End Sub
'SaveProgressイベントハンドラ
Private Sub zip_SaveProgress(ByVal sender As Object, _
ByVal e As Ionic.Zip.SavePro...
If e.EventType = _
Ionic.Zip.ZipProgressEventType.Saving_Started Then
'書庫の作成を開始
Console.WriteLine("{0} の作成開始", e.ArchiveName)
ElseIf e.EventType = _
Ionic.Zip.ZipProgressEventType.Saving_BeforeWrite...
'エントリの書き込み開始
Console.WriteLine("{0} の書き込み開始", e.Current...
ElseIf e.EventType = _
Ionic.Zip.ZipProgressEventType.Saving_EntryBytesR...
'エントリを書き込み中
Console.WriteLine("{0}/{1} バイト 書き込みました"...
e.BytesTransferred, e.TotalByte...
'e.Cancel = True
'とすると、書庫の作成が中止される
ElseIf e.EventType = _
Ionic.Zip.ZipProgressEventType.Saving_AfterWriteE...
'エントリの書き込み終了
Console.WriteLine("{0} の書き込み終了", e.Current...
Console.WriteLine("{0} 個中 {1} 個のエントリの書...
e.EntriesTotal, e.EntriesSaved)
ElseIf e.EventType = _
Ionic.Zip.ZipProgressEventType.Saving_Completed T...
'書庫の作成が完了
Console.WriteLine("{0} の作成終了", e.ArchiveName)
End If
End Sub
'ExtractProgressイベントハンドラ
Private Sub zip_ExtractProgress(ByVal sender As Object, _
ByVal e As Ionic.Zip.Extr...
If e.EventType = _
Ionic.Zip.ZipProgressEventType.Extracting_BeforeE...
'エントリの展開を開始
Console.WriteLine("{0} の展開を開始", e.CurrentEn...
Console.WriteLine("展開先:{0}", e.ExtractLocation)
ElseIf e.EventType = _
Ionic.Zip.ZipProgressEventType.Extracting_EntryBy...
'エントリを展開中
Console.WriteLine("{0}/{1} バイト展開しました", _
e.BytesTransferred, e.TotalByte...
ElseIf e.EventType = _
Ionic.Zip.ZipProgressEventType.Extracting_AfterEx...
'エントリの展開が終了
Console.WriteLine("{0} の展開が終了", e.CurrentEn...
End If
End Sub
}}
#code(csharp){{
//書庫を作成する
private void Button1_Click(object sender, EventArgs e)
{
using (Ionic.Zip.ZipFile zip =
new Ionic.Zip.ZipFile(System.Text.Encoding.GetEnc...
{
//SaveProgressイベントハンドラを追加する
zip.SaveProgress += this.zip_SaveProgress;
//フォルダを追加する
zip.AddDirectory(@"C:\doc");
//ZIP書庫を作成する
zip.Save(@"C:\test.zip");
}
}
//書庫を展開する
private void Button2_Click(object sender, EventArgs e)
{
using (Ionic.Zip.ZipFile zip = Ionic.Zip.ZipFile.Read(
@"C:\test.zip", System.Text.Encoding.GetEncoding(...
{
//ExtractProgressイベントハンドラを追加する
zip.ExtractProgress += this.zip_ExtractProgress;
//すべてのファイルを展開する
zip.ExtractAll(@"C:\temp",
Ionic.Zip.ExtractExistingFileAction.Overwrite...
}
}
//SaveProgressイベントハンドラ
private void zip_SaveProgress(
object sender, Ionic.Zip.SaveProgressEventArgs e)
{
if (e.EventType ==
Ionic.Zip.ZipProgressEventType.Saving_Started)
{
//書庫の作成を開始
Console.WriteLine("{0} の作成開始", e.ArchiveName);
}
else if (e.EventType ==
Ionic.Zip.ZipProgressEventType.Saving_BeforeWrite...
{
//エントリの書き込み開始
Console.WriteLine("{0} の書き込み開始", e.Current...
}
else if (e.EventType ==
Ionic.Zip.ZipProgressEventType.Saving_EntryBytesR...
{
//エントリを書き込み中
Console.WriteLine("{0}/{1} バイト 書き込みました",
e.BytesTransferred, e.TotalBytesToTransfer);
//e.Cancel = true;
//とすると、書庫の作成が中止される
}
else if (e.EventType ==
Ionic.Zip.ZipProgressEventType.Saving_AfterWriteE...
{
//エントリの書き込み終了
Console.WriteLine("{0} の書き込み終了", e.Current...
Console.WriteLine("{0} 個中 {1} 個のエントリの書...
e.EntriesTotal, e.EntriesSaved);
}
else if (e.EventType ==
Ionic.Zip.ZipProgressEventType.Saving_Completed)
{
//書庫の作成が完了
Console.WriteLine("{0} の作成終了", e.ArchiveName);
}
}
//ExtractProgressイベントハンドラ
private void zip_ExtractProgress(
object sender, Ionic.Zip.ExtractProgressEventArgs e)
{
if (e.EventType ==
Ionic.Zip.ZipProgressEventType.Extracting_BeforeE...
{
//エントリの展開を開始
Console.WriteLine("{0} の展開を開始", e.CurrentEn...
Console.WriteLine("展開先:{0}", e.ExtractLocation);
}
else if (e.EventType ==
Ionic.Zip.ZipProgressEventType.Extracting_EntryBy...
{
//エントリを展開中
Console.WriteLine("{0}/{1} バイト展開しました",
e.BytesTransferred, e.TotalBytesToTransfer);
}
else if (e.EventType ==
Ionic.Zip.ZipProgressEventType.Extracting_AfterEx...
{
//エントリの展開が終了
Console.WriteLine("{0} の展開が終了", e.CurrentEn...
}
}
}}
**展開したファイルを上書きするかユーザーに問い合わせる [#...
デフォルトでは、展開先に同名のファイルが存在すると例外が...
もしファイルを上書きするかユーザーに問い合わせるようにす...
さらに、ExtractProgressEventArgs.Cancelプロパティをtrueに...
上書きするかをメッセージボックスでユーザーに問い合わせ、...
#code(vbnet){{
'Button1のClickイベントハンドラ
Private Sub Button1_Click(ByVal sender As Object, ByVal e...
Handles Button1.Click
'書庫を展開する
Using zip As Ionic.Zip.ZipFile = Ionic.Zip.ZipFile.Re...
"C:\test.zip", System.Text.Encoding.GetEncoding("...
'ExtractProgressイベントハンドラを追加する
AddHandler zip.ExtractProgress, AddressOf Me.zip_...
'ExtractProgressイベントで上書きするか指定できる...
zip.ExtractExistingFile = _
Ionic.Zip.ExtractExistingFileAction.InvokeExt...
'すべてのファイルを展開する
zip.ExtractAll("C:\temp")
End Using
End Sub
'ExtractProgressイベントハンドラ
Private Sub zip_ExtractProgress(ByVal sender As Object, _
ByVal e As Ionic.Zip.Extr...
If e.EventType = _
Ionic.Zip.ZipProgressEventType.Extracting_Extract...
'展開するファイル名
Dim filePath As String = System.IO.Path.Combine( _
e.ExtractLocation, e.CurrentEntry.FileName.Re...
'ダイアログを表示する
Dim res As DialogResult = MessageBox.Show(Me, _
"'" & filePath & "'はすでに存在します。" & vb...
"'はい'で上書き 'いいえ'で何もしない 'キ...
"上書きの確認", _
MessageBoxButtons.YesNoCancel, _
MessageBoxIcon.Question)
If res = DialogResult.Yes Then
'上書きする
e.CurrentEntry.ExtractExistingFile = _
Ionic.Zip.ExtractExistingFileAction.Overw...
ElseIf res = DialogResult.No Then
'上書きしない
e.CurrentEntry.ExtractExistingFile = _
Ionic.Zip.ExtractExistingFileAction.DoNot...
ElseIf res = DialogResult.Cancel Then
'展開を中止する
e.Cancel = True
End If
End If
End Sub
}}
#code(csharp){{
//Button1のClickイベントハンドラ
private void Button1_Click(object sender, EventArgs e)
{
//書庫を展開する
using (Ionic.Zip.ZipFile zip = Ionic.Zip.ZipFile.Read(
@"C:\test.zip", System.Text.Encoding.GetEncoding(...
{
//ExtractProgressイベントハンドラを追加する
zip.ExtractProgress += zip_ExtractProgress;
//ExtractProgressイベントで上書きするか指定できる...
zip.ExtractExistingFile =
Ionic.Zip.ExtractExistingFileAction.InvokeExt...
//すべてのファイルを展開する
zip.ExtractAll(@"C:\temp");
}
}
//ExtractProgressイベントハンドラ
private void zip_ExtractProgress(
object sender, Ionic.Zip.ExtractProgressEventArgs e)
{
if (e.EventType ==
Ionic.Zip.ZipProgressEventType.Extracting_Extract...
{
//展開するファイル名
string filePath = System.IO.Path.Combine(
e.ExtractLocation, e.CurrentEntry.FileName.Re...
//ダイアログを表示する
DialogResult res = MessageBox.Show(this,
"'" + filePath + "'はすでに存在します。\n" +
"'はい'で上書き 'いいえ'で何もしない 'キ...
"上書きの確認",
MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Question);
if (res == DialogResult.Yes)
{
//上書きする
e.CurrentEntry.ExtractExistingFile =
Ionic.Zip.ExtractExistingFileAction.Overw...
}
else if (res == DialogResult.No)
{
//上書きしない
e.CurrentEntry.ExtractExistingFile =
Ionic.Zip.ExtractExistingFileAction.DoNot...
}
else if (res == DialogResult.Cancel)
{
//展開を中止する
e.Cancel = true;
}
}
}
}}
**コメント [#d0894924]
- 参考にさせていただきありがとうございます。 -- oo &new{2...
- 質問があるのですが、プログレスバーで進捗状況を表示しな...
- パスワードのプロパティの設定順序気づかなかったので助か...
- 読み取り専用ファイルの圧縮でエラーが出ます。対処方法を...
- バージョンの問題でしょうか? Ionic.Zip.ZipFile.Readの...
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2009-12-15 (火) 01:13:27,DOB...
ページ名:
▲
▼
[
トップ
] [
新規
|
子ページ作成
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]