/// <summary> /// Formats a path /// </summary> /// <param name="pathFormatReturn">Target format type</param> /// <param name="uncPath">Path to format</param> /// <returns>Formatted path</returns> static string FormatPathByType(UncOrRegular pathFormatReturn, string uncPath) { return(pathFormatReturn == UncOrRegular.Regular ? PathTools.ToRegularPath(uncPath) : uncPath); }
/// <summary> /// Formats a path /// </summary> /// <param name="pathFormatReturn">Target format type</param> /// <param name="uncPath">Path to format</param> /// <returns>Formatted path</returns> static string FormatPathByType(UncOrRegular pathFormatReturn, string uncPath) { return pathFormatReturn == UncOrRegular.Regular ? PathTools.ToRegularPath(uncPath) : uncPath; }
/// <summary> /// Search Exection /// </summary> /// <param name="uncDirectoryPath">Start directory path</param> /// <param name="pattern">Search pattern. Uses Win32 native filtering.</param> /// <param name="searchOption"> /// <see cref="SearchOption" /> /// </param> /// <param name="enumerateOptions">The enumeration options for exception handling</param> /// <param name="pathFormatReturn">Specifies the type of path to return.</param> /// <param name="filterType"> /// <see cref="FileOrDirectory" /> /// </param> /// <returns>Collection of path</returns> static IEnumerable <String> FindPaths(String uncDirectoryPath, String pattern = "*", SearchOption searchOption = SearchOption.TopDirectoryOnly, FileOrDirectory?filterType = null, SuppressExceptions enumerateOptions = SuppressExceptions.None, UncOrRegular pathFormatReturn = UncOrRegular.Regular) { // Result Container var results = new List <String>(); // Match for start of search string currentPath = PathTools.Combine(uncDirectoryPath, pattern); // Find First file var win32FindData = new Win32FindData(); int win32Error; using (var fileHandle = FindFirstSafeFileHandle(currentPath, win32FindData, out win32Error)) { // Take care of invalid handles if (fileHandle.IsInvalid && EnumerationHandleInvalidFileHandle(uncDirectoryPath, enumerateOptions, win32Error)) { return(new List <String>()); } do { // Ignore . and .. directories if (IsSystemDirectoryEntry(win32FindData)) { continue; } // Create hit for current search result string resultPath = PathTools.Combine(uncDirectoryPath, win32FindData.cFileName); // if it's a file, add to the collection if (!ContainsFileAttribute(win32FindData.dwFileAttributes, FileAttributes.Directory)) { if (filterType == null || ((FileOrDirectory)filterType == FileOrDirectory.File)) { // It's a file results.Add(FormatPathByType(pathFormatReturn, resultPath)); } } else { // It's a directory // Check for search searchFocus directories if (filterType != null && ((FileOrDirectory)filterType == FileOrDirectory.Directory)) { results.Add(FormatPathByType(pathFormatReturn, resultPath)); } // SubFolders?! if (searchOption == SearchOption.AllDirectories) { var r = new List <String>(FindPaths(resultPath, pattern, searchOption, filterType, enumerateOptions)); if (r.Count > 0) { results.AddRange(r); } } } // Create new FindData object for next result win32FindData = new Win32FindData(); } // Search for next entry while (Win32SafeNativeMethods.FindNextFile(fileHandle, win32FindData)); } // Return result; return(results); }
/// <summary> /// Search Exection /// </summary> /// <param name="uncDirectoryPath">Start directory path</param> /// <param name="pattern">Search pattern. Uses Win32 native filtering.</param> /// <param name="searchOption"> /// <see cref="SearchOption" /> /// </param> /// <param name="enumerateOptions">The enumeration options for exception handling</param> /// <param name="pathFormatReturn">Specifies the type of path to return.</param> /// <param name="filterType"> /// <see cref="FileOrDirectory" /> /// </param> /// <returns>Collection of path</returns> static IEnumerable<String> FindPaths(String uncDirectoryPath, String pattern = "*", SearchOption searchOption = SearchOption.TopDirectoryOnly, FileOrDirectory? filterType = null, SuppressExceptions enumerateOptions = SuppressExceptions.None, UncOrRegular pathFormatReturn = UncOrRegular.Regular) { // Result Container var results = new List<String>(); // Match for start of search string currentPath = PathTools.Combine(uncDirectoryPath, pattern); // Find First file var win32FindData = new Win32FindData(); int win32Error; using (var fileHandle = FindFirstSafeFileHandle(currentPath, win32FindData, out win32Error)) { // Take care of invalid handles if (fileHandle.IsInvalid && EnumerationHandleInvalidFileHandle(uncDirectoryPath, enumerateOptions, win32Error)) { return new List<String>(); } do { // Ignore . and .. directories if (IsSystemDirectoryEntry(win32FindData)) { continue; } // Create hit for current search result string resultPath = PathTools.Combine(uncDirectoryPath, win32FindData.cFileName); // if it's a file, add to the collection if (!ContainsFileAttribute(win32FindData.dwFileAttributes, FileAttributes.Directory)) { if (filterType == null || ((FileOrDirectory)filterType == FileOrDirectory.File)) { // It's a file results.Add(FormatPathByType(pathFormatReturn, resultPath)); } } else { // It's a directory // Check for search searchFocus directories if (filterType != null && ((FileOrDirectory)filterType == FileOrDirectory.Directory)) { results.Add(FormatPathByType(pathFormatReturn, resultPath)); } // SubFolders?! if (searchOption == SearchOption.AllDirectories) { var r = new List<String>(FindPaths(resultPath, pattern, searchOption, filterType, enumerateOptions)); if (r.Count > 0) { results.AddRange(r); } } } // Create new FindData object for next result win32FindData = new Win32FindData(); } // Search for next entry while (Win32SafeNativeMethods.FindNextFile(fileHandle, win32FindData)); } // Return result; return results; }