ZipFileをUpdateモードで開いてzipファイル内のファイル(Entry)を取得Delete()メソッドで削除します。
ソースコード
using System.IO.Compression;
const string zipfile = @".\test.zip";
const string entryFileName = @"dummy.txt";
// テスト用にzipファイルを新規作成
var zip = ZipFile.Open(zipfile, ZipArchiveMode.Create);
// 削除するdummy.txtファイルを追加
var newEntry = zip.CreateEntry(entryFileName, CompressionLevel.NoCompression);
var stream = newEntry.Open();
var sw = new StreamWriter(stream);
sw.WriteLine("ABC");
sw.Close();
stream.Close();
zip.Dispose();
// ファイルが追加されたことを確認
var zip2 = ZipFile.OpenRead(zipfile);
foreach(var entry in zip2.Entries)
{
Console.WriteLine($"{entry.FullName}");
// dummpy.txt
}
zip2.Dispose();
// dummy.txtファイルを削除
var zip3 = ZipFile.Open(zipfile, ZipArchiveMode.Update);
var entry2 = zip3.GetEntry(entryFileName);
// 削除
entry2?.Delete();
zip3.Dispose();
// ファイルが削除されたことを確認
var zip4 = ZipFile.OpenRead(zipfile);
var entry4 = zip3.GetEntry(entryFileName);
if (entry4 is null)
{
Console.WriteLine($"{entryFileName}は存在しない");
}
else
{
Console.WriteLine($"{entryFileName}は存在する");
}
zip4.Dispose();
// テストが終わったのでzipファイル自体を削除
File.Delete(zipfile);
実行
dummy.txt
dummy.txtは存在しない
削除のコードよりテスト用のzipファイルの作成及び確認の方がコードが長いのはご愛敬。
コメント