【发布时间】:2014-04-15 20:43:54
【问题描述】:
如何将一些文件(几乎总是一个 .csv 文件)添加到现有的 zip 文件中?
【问题讨论】:
-
这个问题不是sharpziplib特有的,所以我重新打开了。
如何将一些文件(几乎总是一个 .csv 文件)添加到现有的 zip 文件中?
【问题讨论】:
对于创建、提取和打开 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);
}
}
}
【讨论】:
foreach中的代码,使用CreateEntryFromFolder方法支持文件夹
CreateEntryFromFile。此方法和另外两个有用的方法(ExtractToDirectory 和 ExtractToFile)被定义为 ZipFileExtensions 类中的扩展方法。
最简单的方法是通过 http://dotnetzip.codeplex.com/ 获取 DotNetZip
添加文件就这么简单
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();
}
编辑注释: DotNetZip 曾经住在 Codeplex。 Codeplex 已关闭。旧档案仍然 [可在 Codeplex 获得][1]。看起来代码已经迁移到Github了:
【讨论】:
由于您使用的是 .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("========================");
}
}
}
【讨论】:
CreateEntryFromFile 方法:msdn.microsoft.com/en-us/library/hh485720(v=vs.110).aspx 如果您想发布新问题,我很乐意提供代码示例。我不觉得这个用例对 this 问题很重要。