Почтовая папка в С#
Что такое пример (простой код), как застегнуть папку на С#?
Update:
Я не вижу пространство имен ICSharpCode
. Я загрузил ICSharpCode.SharpZipLib.dll
, но я не знаю, где скопировать этот DLL файл. Что мне нужно сделать, чтобы увидеть это пространство имен?
И у вас есть ссылка на этот пример MSDN для папки сжатия, потому что я прочитал все MSDN, но ничего не нашел.
ОК, но мне нужна следующая информация.
Где мне скопировать ICSharpCode.SharpZipLib.dll
, чтобы увидеть это пространство имен в Visual Studio?
Ответы
Ответ 1
Этот ответ изменяется с помощью .NET 4.5. Создание zip файла становится невероятно легким. Никаких сторонних библиотек не потребуется.
string startPath = @"c:\example\start";
string zipPath = @"c:\example\result.zip";
string extractPath = @"c:\example\extract";
ZipFile.CreateFromDirectory(startPath, zipPath);
ZipFile.ExtractToDirectory(zipPath, extractPath);
Ответ 2
В файле справки DotNetZip http://dotnetzip.codeplex.com/releases/
using (ZipFile zip = new ZipFile())
{
zip.UseUnicodeAsNecessary= true; // utf-8
zip.AddDirectory(@"MyDocuments\ProjectX");
zip.Comment = "This zip was created at " + System.DateTime.Now.ToString("G") ;
zip.Save(pathToSaveZipFile);
}
Ответ 3
В BCL ничего не делается для вас, но для .NET есть две большие библиотеки, которые поддерживают функциональность.
Я использовал оба варианта и могу сказать, что они очень полные и имеют хорошо разработанные API-интерфейсы, поэтому в основном это вопрос личных предпочтений.
Я не уверен, что они явно поддерживают добавление Folders, а не только отдельных файлов в zip файлы, но создать довольно то, что рекурсивно повторяется через каталог и его подкаталоги с помощью DirectoryInfo
и FileInfo
.
Ответ 4
В пространстве имен System.IO.Packaging есть класс ZipPackage, который встроен в .NET 3, 3.5 и 4.0.
http://msdn.microsoft.com/en-us/library/system.io.packaging.zippackage.aspx
Вот пример использования.
http://www.codeproject.com/KB/files/ZipUnZipTool.aspx?display=Print
Ответ 5
В .NET 4.5 ZipFile.CreateFromDirectory(startPath, zipPath); метод не охватывает сценарий, в котором вы хотите закрепить несколько файлов и подпапок, не помещая их в папку. Это действительно, если вы хотите, чтобы распаковать файлы непосредственно в текущую папку.
Этот код работал у меня:
public static class FileExtensions
{
public static IEnumerable<FileSystemInfo> AllFilesAndFolders(this DirectoryInfo dir)
{
foreach (var f in dir.GetFiles())
yield return f;
foreach (var d in dir.GetDirectories())
{
yield return d;
foreach (var o in AllFilesAndFolders(d))
yield return o;
}
}
}
void Test()
{
DirectoryInfo from = new DirectoryInfo(@"C:\Test");
using (FileStream zipToOpen = new FileStream(@"Test.zip", FileMode.Create))
{
using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Create))
{
foreach (FileInfo file in from.AllFilesAndFolders().Where(o => o is FileInfo).Cast<FileInfo>())
{
var relPath = file.FullName.Substring(from.FullName.Length+1);
ZipArchiveEntry readmeEntry = archive.CreateEntryFromFile(file.FullName, relPath);
}
}
}
}
Папки не нужно "создавать" в zip-архиве. Второй параметр "entryName" в CreateEntryFromFile должен быть относительным путем, и при распаковке zip файла будут обнаружены и созданы каталоги относительных путей.
Ответ 6
Здесь есть статья о MSDN, в которой есть пример приложения для распаковки и распаковки файлов и папок исключительно на С#. Я успешно использовал некоторые из этих классов в течение длительного времени. Код выпущен под лицензией Microsoft Permissive, если вам нужно знать что-то подобное.
EDIT: Благодаря Cheeso за то, что я немного отстаю от времени. Пример MSDN, на который я указал, фактически использует DotNetZip и действительно очень полнофункциональный в наши дни. Основываясь на моем опыте предыдущей версии этого, я бы с радостью порекомендовал его.
SharpZipLib также довольно зрелая библиотека и высоко оценена людьми, и доступна под лицензией GPL. Это действительно зависит от ваших потребностей в zipping и того, как вы просматриваете условия лицензии для каждого из них.
Рич
Ответ 7
"Where should I copy ICSharpCode.SharpZipLib.dll to see that namespace in Visual Studio?"
Вам нужно добавить файл dll в качестве ссылки в вашем проекте. Щелкните правой кнопкой мыши ссылку "Ссылки" в "Обозреватель решений" → "Добавить ссылку" → "Обзор", а затем выберите dll.
Наконец, вам нужно будет добавить его как оператор using в любые файлы, в которые вы хотите его использовать.
Ответ 8
В следующем коде используется сторонний ZIP-компонент из Rebex:
// add content of the local directory C:\Data\
// to the root directory in the ZIP archive
// (ZIP archive C:\archive.zip doesn't have to exist)
Rebex.IO.Compression.ZipArchive.Add(@"C:\archive.zip", @"C:\Data\*", "");
Или если вы хотите добавить больше папок без необходимости открывать и закрывать архив несколько раз:
using Rebex.IO.Compression;
...
// open the ZIP archive from an existing file
ZipArchive zip = new ZipArchive(@"C:\archive.zip", ArchiveOpenMode.OpenOrCreate);
// add first folder
zip.Add(@"c:\first\folder\*","\first\folder");
// add second folder
zip.Add(@"c:\second\folder\*","\second\folder");
// close the archive
zip.Close(ArchiveSaveAction.Auto);
Вы можете загрузить здесь почтовый компонент.
Использование бесплатной лицензии LGPL SharpZipLib является обычной альтернативой.
Отказ от ответственности: я работаю для Rebex
Ответ 9
ComponentPro ZIP может помочь вам в достижении этой задачи. Следующий фрагмент кода сжимает файлы и директории в папке. Вы также можете использовать маску wilcard.
using ComponentPro.Compression;
using ComponentPro.IO;
...
// Create a new instance.
Zip zip = new Zip();
// Create a new zip file.
zip.Create("test.zip");
zip.Add(@"D:\Temp\Abc"); // Add entire D:\Temp\Abc folder to the archive.
// Add all files and subdirectories from 'c:\test' to the archive.
zip.AddFiles(@"c:\test");
// Add all files and subdirectories from 'c:\my folder' to the archive.
zip.AddFiles(@"c:\my folder", "");
// Add all files and subdirectories from 'c:\my folder' to '22' folder within the archive.
zip.AddFiles(@"c:\my folder2", "22");
// Add all .dat files from 'c:\my folder' to '22' folder within the archive.
zip.AddFiles(@"c:\my folder2", "22", "*.dat");
// Or simply use this to add all .dat files from 'c:\my folder' to '22' folder within the archive.
zip.AddFiles(@"c:\my folder2\*.dat", "22");
// Add *.dat and *.exe files from 'c:\my folder' to '22' folder within the archive.
zip.AddFiles(@"c:\my folder2\*.dat;*.exe", "22");
TransferOptions opt = new TransferOptions();
// Donot add empty directories.
opt.CreateEmptyDirectories = false;
zip.AddFiles(@"c:\abc", "/", opt);
// Close the zip file.
zip.Close();
http://www.componentpro.com/doc/zip имеет больше примеров