Exemplo n.º 1
0
 private void AddToTable(Table table, IFileSystemInformation info)
 {
     table.AddRow
     (
         info.LastWriteTime.ToString(DefaultTimeFormat),
         (info is IDirectoryInformation) ? "<DIR>" : "",
         (info is IFileInformation) ? ((IFileInformation)info).Length.ToString(DefaultNumberFormat) : "",
         info.Name
     );
 }
Exemplo n.º 2
0
 private void AddToTable(Table table, IFileSystemInformation info)
 {
     table.AddRow
         (
             info.LastWriteTime.ToString(DefaultTimeFormat),
             (info is IDirectoryInformation) ? "<DIR>" : "",
             (info is IFileInformation) ? ((IFileInformation)info).Length.ToString(DefaultNumberFormat) : "",
             info.Name
         );
 }
Exemplo n.º 3
0
        /// <summary>
        /// Walk directories in the current directory. Allows filtering by attributes. Folders with the given attributes will be skipped as well.
        /// </summary>
        /// <param name="fileSystemInformation">If the information is not a directory, returns an empty enumerable.</param>
        public static IEnumerable <IDirectoryInformation> EnumerateDirectories(
            this IFileSystemInformation fileSystemInformation,
            string searchPattern             = "*",
            SearchOption searchOption        = SearchOption.TopDirectoryOnly,
            FileAttributes excludeAttributes = FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReparsePoint)
        {
            var directoryInfo = fileSystemInformation as IDirectoryInformation;

            if (directoryInfo == null)
            {
                return(Enumerable.Empty <IDirectoryInformation>());
            }
            return(directoryInfo.EnumerateChildren(ChildType.Directory, searchPattern, searchOption, excludeAttributes).OfType <IDirectoryInformation>());
        }
Exemplo n.º 4
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();
        }