Как добавить некоторый файл (почти всегда один CSV файл) в существующий zip файл?
Как добавить файлы в существующий zip-архив
Ответ 1
Поскольку вы используете .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("========================");
}
}
}
Ответ 2
Для создания, извлечения и открытия zip-архивов мы можем использовать ZipFile-класс с рефери: System.IO.Compress.FileSystem. Для.NET 4.5.2 и ниже нам также необходимо добавить referece: 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);
}
}
}
Ответ 3
Самый простой способ - получить 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();
}
Отредактировано для заметок: DotNetZip использовался для работы в Codeplex. Codeplex отключен. Старый архив все еще доступен [в Codeplex] [1]. Похоже, код переместился в Github:
- https://github.com/DinoChiesa/DotNetZip. Похоже, что это оригинальное авторское репо.
- https://github.com/haf/DotNetZip.Semverd. Это похоже на поддерживаемую версию. Он также упаковал доступный через Nuget по адресу https://www.nuget.org/packages/DotNetZip/