既存のZipファイルにファイル(ほとんどの場合、単一の.csvファイル)を追加するにはどうすればよいですか?
.NET 4.5を使用しているため、ZipArchive(System.IO.Compression)クラスを使用してこれを実現できます。これがMSDNのドキュメントです:( [〜#〜] msdn [〜#〜] )。
以下はその例です。テキストを書き込むだけですが、.csvファイルを読み込んで新しいファイルに書き出すことができます。ファイルを単にコピーするには、CreateFileFromEntry
の拡張メソッドであるZipArchive
を使用します。
using (FileStream zipToOpen = new FileStream(@"c:\users\exampleuser\release.Zip", FileMode.Open))
{
using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
{
ZipArchiveEntry readmeEntry = archive.CreateEntry("Readme.txt");
using (StreamWriter writer = new StreamWriter(readmeEntry.Open()))
{
writer.WriteLine("Information about this package.");
writer.WriteLine("========================");
}
}
}
Zipアーカイブを作成、抽出、および開くには、 ZipFile Class を参照に使用できます:System.IO.Compression.FileSystem。 .NET 4.5.2以前の場合、参照を追加する必要もあります:System.IO.Compression。 Zipにファイルを追加する方法は次のとおりです。
public static void AddFilesToZip(string zipPath, string[] files)
{
if (files == null || files.Length == 0)
{
return;
}
using (var zipArchive = ZipFile.Open(zipPath, ZipArchiveMode.Update))
{
foreach (var file in files)
{
var fileInfo = new FileInfo(file);
zipArchive.CreateEntryFromFile(fileInfo.FullName, fileInfo.Name);
}
}
}
最も簡単な方法は、DotNetZipを http://dotnetzip.codeplex.com/ で取得することです。
ファイルの追加は簡単です
String[] filenames = { @"ReadMe.txt",
@"c:\data\collection.csv" ,
@"c:\reports\AnnualSummary.pdf"
} ;
using ( ZipFile Zip = new ZipFile() )
{
Zip.AddFiles(filenames);
Zip.Save("Archive.Zip");
}
他の種類の更新も同様に簡単です。
using (ZipFile Zip = ZipFile.Read("ExistingArchive.Zip"))
{
// update an existing item in the Zip file
Zip.UpdateItem("Portfolio.doc");
// remove an item from the Zip file
Zip["OldData.txt"].RemoveEntry();
// rename an item in the Zip file
Zip["Internationalization.doc"].FileName = "i18n.doc";
// add a comment to the archive
Zip.Comment = "This Zip archive was updated " + System.DateTime.ToString("G");
Zip.Save();
}
Edited To Note:DotNetZipは、Codeplexに住んでいたものです。 Codeplexはシャットダウンされました。古いアーカイブはまだ[Codeplexで入手可能] [1]です。コードがGithubに移行したようです: