.Net/C# 封装磁盘目录文件搜索功能的工具类 (实现了与搜索相关的事件,以便插入客户处理代码)[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 playyuer 的 blog

/*
.net/c# 封装磁盘目录文件搜索功能的工具类
(实现了与搜索相关的事件,以便插入客户处理代码)
*/

// searchwithevents.cs :
// 输出 exe:
// csc.exe searchwithevents.cs /r:c:\windows\microsoft.net\framework\v1.1.4322\microsoft.visualbasic.dll
// 输出 dll:
// csc.exe /t:library searchwithevents.cs /r:c:\windows\microsoft.net\framework\v1.1.4322\microsoft.visualbasic.dll

//using system;
namespace microshaoft.utils
{
 /// <summary>
 /// .net/c# 实现磁盘目录文件搜索的工具类 (搜索事件)
 /// </summary>
 public class search
 {
  /// <summary>
  /// 递归
  /// </summary>
  /// <param name="sourcedirectory">被搜索的源目录</param>
  /// <param name="directorypatterns">源目录下面的所有子目录的搜索匹配模式</param>
  /// <param name="filepatterns">源目录下面的所有文件的搜索匹配模式</param>
  /// <param name="destinationdirectory">存储相对路径</param>
  private void searching(string sourcedirectory, string directorypatterns, string filepatterns, string destinationdirectory)
  {
   this._directorypatterns = directorypatterns;
   this._filepatterns = filepatterns;

   string[] patterns = this._directorypatterns.split(';');
   string[] patterns = this._filepatterns.split(';');

   this._directoryid = 0;
   this._fileid = 0;

   destinationdirectory += (destinationdirectory.endswith(@"\") ? "" : @"\");

   if (this._directoriescount == 0) //处理源目录的当前的文件
   {
    this._directoriescount ++;
    this._directoryid ++;
    this._currentdirectoryname = sourcedirectory;

    if (sourcedirectory.endswith(@"\"))
    {
     this._currentdirectoryname = sourcedirectory.substring(0, sourcedirectory.length - 1);
    }

    this._parentdirectoryname = this._currentdirectoryname.substring(this._currentdirectoryname.lastindexof(@"\") + 1);
    destinationdirectory += this._parentdirectoryname + @"\";
    this._currentdestinationdirectoryname = destinationdirectory;

    if (this.addsearcheddirectory(this._currentdirectoryname))
    {
     this._directoryuid ++;
    }

    if (searcheddirectory != null) //触发一次找到源目录的事件
    {
     onsearcheddirectory(sourcedirectory, this._directoriescount, this._directoryid, this._currentdestinationdirectoryname);
    }
    foreach (string p in patterns)
    {
     foreach (string f in system.io.directory.getfiles(sourcedirectory, p.trim()))
     {
      this._filescount ++;
      this._fileid ++;

      if (this.addsearchedfile(f))
      {
       this._fileuid ++;
      }

      if (searchedfile != null)
      {
       onsearchedfile(f, directoryuid, fileuid, this._directoryid, this.fileid, this._currentdestinationdirectoryname);
      }
      if (this._cancel != cancelactions.no)
      {
       break;
      }
     }
     if (this._cancel != cancelactions.no)
     {
      break;
     }
    }
   }
   if (this._cancel != cancelactions.alldirectories)
   {
    this._fileid = 0;
    this._directoryid = 0;

    foreach (string p in patterns)
    {
     if (this._cancel != cancelactions.alldirectories)
     {
      foreach (string d in system.io.directory.getdirectories(sourcedirectory, p.trim()))
      {

本文关键:.Net/C# 封装磁盘目录文件搜索功能的工具类 (实现了与搜索相关的事件,以便插入客户处理代码)
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top