我怎样能将一个文件(几乎总是单个的 .csv 文件)添加到一个已存在的 zip 文件中?
如果您使用的是.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
方法:http://msdn.microsoft.com/zh-cn/library/hh485720(v=vs.110).aspx 如果你想要发表一个新问题,我很乐意提供代码示例。我觉得这个用例对于这个问题并不是非常重要。 - BradleyDotNET要创建、提取和打开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);
}
}
}
CreateEntryFromFolder
方法来修改foreach
中的代码以支持文件夹。 - Feiyu ZhouCreateEntryFromFile
方法。这个方法和其他两个有用的方法 (ExtractToDirectory
和 ExtractToFile
) 被定义为扩展方法,即在 ZipFileExtensions 类中定义。 - pholparCreateEntryFromDirectory
方法,并且可以很好地递归工作。 - TaWString[] 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上获得][1]。看起来代码已经迁移到了Github: