我正在创建一个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文件,就好像它们是文件夹一样。我怎样才能做到这一点?最好不要创建临时文件......
编辑忘记提及这不是个人项目;它是我在公司工作的商业应用程序。
答案 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(...))
}
}
}