Как обращаться с .zip файлами как каталогами в C #? - PullRequest
4 голосов
/ 23 апреля 2010

Я хочу иметь возможность читать файлы в zip-файлах так же, как я читал бы файлы в физической папке. Как я могу сделать это без необходимости извлекать файлы?

Ответы [ 4 ]

3 голосов
/ 28 мая 2013

Я недавно открыл исходную библиотеку Platform.VirtualFileSystem C #.

https://github.com/platformdotnet/Platform.VirtualFileSystem https://github.com/platformdotnet/Platform.VirtualFileSystem/wiki

Вы можете читать zip-файлы следующим образом:

var directory = FileSystemManager.Default.ResolveDirectory("zip://[file:///c:/test.zip]/");
directory.GetFiles().ForEach(Console.WriteLine);

Доступен в NuGet: http://nuget.org/packages/Platform.VirtualFileSystem.Providers.Zip/

3 голосов
/ 23 апреля 2010

Существуют некоторые компоненты, которые позволяют просматривать содержимое файла .zip из приложения .NET:

Я раньше использовал #ziplib, и он отлично работал для моих целей, которые не были слишком обширными.

0 голосов
/ 23 апреля 2010

Вам нужно написать или найти оболочку, которая представляет собой виртуальную файловую систему.

API может быть простым, как метод public Stream GetFile(string path), или сложным, как полная FS.

Это возможно при использовании любой библиотеки сжатия, которая поддерживает формат файла, который вы хотели бы использовать.

Я написал простую сжатую VFS с использованием библиотеки Cheeso DotNetZip , и она прекрасно работает.

0 голосов
/ 23 апреля 2010

Прежде всего .NET, хотя он поддерживает сжатые файлы, но не поддерживает ZIP-файлы (не уверен в .NET v4)

В любом случае я использовал SharpZipLib http://www.icsharpcode.net/OpenSource/SharpZipLib/ (GPL + исключения, внимательно прочитайте)

Эта библиотека позволяет вам проходить через ZipStream и получать доступ к ZipEntry, который предоставляет вам всю информацию о файле.

Имейте в виду, что при сжатии файлов, которые вы хотите, если вы сжимаете папку, первой записью будет эта папка. Не проблема, но если вы хотите иметь четкий список, заархивируйте его без путей к папкам.

Также поддерживает пароли на почтовых индексах.

...