C#存档中的文件列表

时间:2010-11-01 13:03:37

标签: c# search zip

我正在创建一个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 个答案:

答案 0 :(得分:1)

您应该使用SharpZipLib之类的工具:http://www.icsharpcode.net/opensource/sharpziplib/。这允许您列出.zip文件中的文件,并可选择提取它们。

.NET框架本身不支持使用FileFinder搜索.zip文件。

答案 1 :(得分:1)

.NET 3.5及更高版本中提供的System.IO.Packaging Namespace签出。你会找到一些好的答案here

答案 2 :(得分:1)

如果您可以使用.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(...))
        }
    }
}