C # Список файлов в архиве - PullRequest
3 голосов
/ 01 ноября 2010

Я создаю класс FileFinder, где вы можете выполнить поиск следующим образом:

    var fileFinder = new FileFinder(
                         new string[]
                             {
                                  "C:\\MyFolder1",
                                  "C:\\MyFolder2" 
                             }, 
                         new string[]
                             {
                                  "*.txt",
                                  "*.doc"
                             } );
    fileFinder.FileFound += new EventHandler<FileFinderEventArgs>(FileFinder_FileFound);
    DoSearch();

Если бы я выполнил этот код, FileFinder_FileFound будет вызываться каждый раз, когда *.txt или *.docфайл был найден в C:\\MyFolder1 и его подпапках, или C:\\MyFolder2 и его подпапках.

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

РЕДАКТИРОВАТЬ Забыл упомянуть, что это не личный проект;для коммерческого применения, над которым я работаю в моей компании.

Ответы [ 3 ]

1 голос
/ 01 ноября 2010

Оформить заказ Пространство имен System.IO.Packaging доступно в .NET 3.5 и выше. Вы найдете несколько хороших ответов здесь

1 голос
/ 14 февраля 2014

Если вы можете использовать .NET 4.5 или выше, теперь вы, наконец, можете использовать ZipArchive.Он находится в System.IO.Compression пространстве имен.В примере также используется класс ZipFile, который требует не только ссылки на сборку System.IO.Compression, но и сборки System.IO.Compression.FileSystem (оба вносят свой вклад в одно и то же пространство имен).MSDN: http://msdn.microsoft.com/en-us/library/system.io.compression.ziparchive%28v=vs.110%29.aspx

Так что, если ваш искатель обнаружит zip-файл, вы можете сделать что-то вроде этого (суть):

using System;
using System.IO;
using System.IO.Compression;

using (ZipArchive archive = ZipFile.OpenRead(zipFilePath))
{
    foreach (ZipArchiveEntry entry in archive.Entries)
    {
        if (entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) ||
            entry.FullName.EndsWith(".doc", StringComparison.OrdinalIgnoreCase))
        {
            // FileFinder_FileFound(new FileFinderEventArgs(...))
        }
    }
}
1 голос
/ 01 ноября 2010

Вы должны использовать такой инструмент, как SharpZipLib: http://www.icsharpcode.net/opensource/sharpziplib/. Это позволяет вам перечислить файлы в файле .zip и, при необходимости, извлечь их.

.NET Framework изначально не поддерживает использование FileFinder для поиска в файлах .zip.

...