internal static IFileSystemInformation Create(string originalPath, SafeFileHandle fileHandle, FileBasicInformation info, IFileService fileService) { if ((info.FileAttributes & FileAttributes.Directory) != 0) { return(DirectoryInformation.Create(originalPath, fileHandle, info, fileService)); } else { return(FileInformation.Create(originalPath, fileHandle, info, fileService)); } }
internal static IFileSystemInformation Create(ref RawFindData findData, IFileService fileService) { if ((findData.FileAttributes & FileAttributes.Directory) != 0) { return(DirectoryInformation.Create(ref findData, fileService)); } else { return(FileInformation.Create(ref findData, fileService)); } }
internal static IFileSystemInformation Create(NativeMethods.FileManagement.FindResult findResult, IFileService fileService) { if ((findResult.Attributes & System.IO.FileAttributes.Directory) != 0) { return(DirectoryInformation.Create(findResult, fileService)); } else { return(FileInformation.Create(findResult, fileService)); } }
internal static IFileSystemInformation Create(string originalPath, SafeFileHandle fileHandle, NativeMethods.FileManagement.BY_HANDLE_FILE_INFORMATION info, IFileService fileService) { if ((info.dwFileAttributes & System.IO.FileAttributes.Directory) != 0) { return(DirectoryInformation.Create(originalPath, fileHandle, info, fileService)); } else { return(FileInformation.Create(originalPath, fileHandle, info, fileService)); } }
internal static IFileSystemInformation Create(string path, System.IO.FileAttributes attributes, IFileService fileService) { if (attributes.HasFlag(System.IO.FileAttributes.Directory)) { return(DirectoryInformation.Create(path, attributes, fileService)); } else { // Should only be using attributes for root directories throw new InvalidOperationException(); } }
internal static IEnumerable <IFileSystemInformation> EnumerateChildrenInternal( string directory, ChildType childType, string searchPattern, System.IO.SearchOption searchOption, System.IO.FileAttributes excludeAttributes, IFileService fileService) { var firstFile = NativeMethods.FileManagement.FindFirstFile(Paths.Combine(directory, searchPattern)); var findInfo = firstFile; if (firstFile != null) { // Look for specified file/directories do { bool isDirectory = findInfo.Attributes.HasFlag(System.IO.FileAttributes.Directory); if ((findInfo.Attributes & excludeAttributes) == 0 && findInfo.FileName != "." && findInfo.FileName != ".." && ((isDirectory && childType == ChildType.Directory) || (!isDirectory && childType == ChildType.File))) { yield return(FileSystemInformation.Create(findInfo, fileService)); } findInfo = NativeMethods.FileManagement.FindNextFile(firstFile); } while (findInfo != null); firstFile.FindHandle.Close(); } if (searchOption != System.IO.SearchOption.AllDirectories) { yield break; } // Need to recurse to find additional matches firstFile = NativeMethods.FileManagement.FindFirstFile(Paths.Combine(directory, "*"), directoriesOnly: true); if (firstFile == null) { yield break; } findInfo = firstFile; do { if ((findInfo.Attributes & excludeAttributes) == 0 && findInfo.Attributes.HasFlag(System.IO.FileAttributes.Directory) && findInfo.FileName != "." && findInfo.FileName != "..") { IFileSystemInformation childDirectory = DirectoryInformation.Create(findInfo, fileService); foreach (var child in EnumerateChildrenInternal(childDirectory.Path, childType, searchPattern, searchOption, excludeAttributes, fileService)) { yield return(child); } } findInfo = NativeMethods.FileManagement.FindNextFile(firstFile); } while (findInfo != null); firstFile.FindHandle.Close(); }