Ejemplo n.º 1
0
 /// <summary>
 /// If overriding this method, make sure to call base.Cancel first.
 /// </summary>
 public virtual void Cancel()
 {
     foreach (var cancelAction in CancelActions)
     {
         cancelAction();
     }
     CancelActions.Clear();
     CommitActions.Clear();
 }
Ejemplo n.º 2
0
 /// <summary>
 /// If overriding this method, make sure to call base.Commit first.
 /// </summary>
 public virtual void Commit()
 {
     foreach (var commitAction in CommitActions)
     {
         commitAction();
     }
     CommitActions.Clear();
     CancelActions.Clear();
 }
Ejemplo n.º 3
0
        /// <summary>
        /// 递归FileSearching
        /// </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()))
                        {
                            if (this._Cancel != CancelActions.AllDirectories)
                            {
                                this._DirectoriesCount++;
                                this._DirectoryID++;

                                this._CurrentDirectoryName = d + (d.EndsWith(@"\") ? "" : @"\");
                                this._CurrentDestinationDirectoryName = DestinationDirectory + d.Substring(d.LastIndexOf(@"\") + 1) + @"\";

                                if (this.AddSearchedDirectory(this._CurrentDirectoryName))
                                {
                                    this._DirectoryUID++;
                                }

                                if (SearchedDirectory != null)
                                {
                                    OnSearchedDirectory(d, DirectoryUID, this._DirectoryID, this._CurrentDestinationDirectoryName);
                                }
                                if (this._Cancel == CancelActions.CurrentDirectory)
                                {
                                    this._Cancel = CancelActions.No;
                                    continue;
                                }
                                else if (this._Cancel == CancelActions.AllDirectories)
                                {
                                    break;
                                }
                                if (this._Cancel != CancelActions.AllDirectories)
                                    foreach (string p in patterns)
                                    {
                                        foreach (string f in System.IO.Directory.GetFiles(d, 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.CurrentDirectory)
                                {
                                    this._Cancel = CancelActions.No;
                                    continue;
                                }
                                else if (this._Cancel == CancelActions.AllDirectories)
                                {
                                    break;
                                }
                                if (this._Cancel != CancelActions.AllDirectories)
                                {
                                    this._Nest++;
                                    Searching(d, this._DirectoryPatterns, this._FilePatterns, this._CurrentDestinationDirectoryName);
                                    this._Nest--;
                                }

                            }
                        }
                    }
                    if (this._Cancel == CancelActions.CurrentDirectory)
                    {
                        this._Cancel = CancelActions.No;
                        continue;
                    }
                    else if (this._Cancel == CancelActions.AllDirectories)
                    {
                        break;
                    }

                }
            }

            if ((this._Nest == 0))
            {
                if (Searched != null)
                {
                    OnSearched(this.DirectoryUID, this.FileUID, this._CurrentDestinationDirectoryName);
                }
            }
        }