示例#1
0
 /// <summary>
 /// Given archiveFile specifications possibly with wildcards in them
 /// return an enumerator that returns each expanded archiveFile name in turn.
 ///
 /// If searchOpt is AllDirectories it does a recursive match.
 /// </summary>
 public static IEnumerable <string> ExpandWildcards(string[] fileSpecifications, SearchOption searchOpt = SearchOption.TopDirectoryOnly)
 {
     foreach (string fileSpec in fileSpecifications)
     {
         string dir = Path.GetDirectoryName(fileSpec);
         if (dir.Length == 0)
         {
             dir = ".";
         }
         string file = Path.GetFileName(fileSpec);
         foreach (string fileName in DirectoryUtilities.GetFiles(dir, file, searchOpt))
         {
             yield return(fileName);
         }
     }
 }
示例#2
0
        /// <summary>
        /// DirectoryUtilities.GetFiles is basicaly the same as Directory.GetFiles
        /// however it returns IEnumerator, which means that it lazy.  This is very important
        /// for large directory trees.  A searchPattern can be specified (Windows wildcard conventions)
        /// that can be used to filter the set of archiveFile names returned.
        ///
        /// Suggested Usage
        ///
        ///     foreach(string fileName in DirectoryUtilities.GetFiles("c:\", "*.txt")){
        ///         Console.WriteLine(fileName);
        ///     }
        ///
        /// </summary>
        /// <param variable="directoryPath">The base directory to enumerate</param>
        /// <param variable="searchPattern">A pattern to filter the names (windows filename wildcards * ?)</param>
        /// <param variable="searchOptions">Indicate if the search is recursive or not.  </param>
        /// <returns>The enumerator for all archiveFile names in the directory (recursively). </returns>
        public static IEnumerable <string> GetFiles(string directoryPath, string searchPattern, SearchOption searchOptions)
        {
            string[] fileNames = Directory.GetFiles(directoryPath, searchPattern, SearchOption.TopDirectoryOnly);
            Array.Sort <string>(fileNames, StringComparer.OrdinalIgnoreCase);
            foreach (string fileName in fileNames)
            {
                yield return(fileName);
            }

            if (searchOptions == SearchOption.AllDirectories)
            {
                string[] subDirNames = Directory.GetDirectories(directoryPath);
                Array.Sort <string>(subDirNames);
                foreach (string subDir in subDirNames)
                {
                    foreach (string fileName in DirectoryUtilities.GetFiles(subDir, searchPattern, searchOptions))
                    {
                        yield return(fileName);
                    }
                }
            }
        }