Пример #1
0
 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));
     }
 }
Пример #2
0
 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));
     }
 }
Пример #3
0
 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));
     }
 }
Пример #4
0
 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));
     }
 }
Пример #5
0
 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();
     }
 }
Пример #6
0
        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();
        }