Почтовая папка в С# - программирование
Подтвердить что ты не робот

Почтовая папка в С#

Что такое пример (простой код), как застегнуть папку на С#?


Update:

Я не вижу пространство имен ICSharpCode. Я загрузил ICSharpCode.SharpZipLib.dll, но я не знаю, где скопировать этот DLL файл. Что мне нужно сделать, чтобы увидеть это пространство имен?

И у вас есть ссылка на этот пример MSDN для папки сжатия, потому что я прочитал все MSDN, но ничего не нашел.


ОК, но мне нужна следующая информация.

Где мне скопировать ICSharpCode.SharpZipLib.dll, чтобы увидеть это пространство имен в Visual Studio?

4b9b3361

Ответ 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.

Ответ 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 имеет больше примеров