Пример #1
0
        public void MatchCase()
        {
            DirectoryInfo testDirectory    = Directory.CreateDirectory(GetTestFilePath());
            DirectoryInfo testSubdirectory = Directory.CreateDirectory(Path.Combine(testDirectory.FullName, "Subdirectory"));
            FileInfo      fileOne          = new FileInfo(Path.Combine(testDirectory.FullName, "FileOne"));
            FileInfo      fileTwo          = new FileInfo(Path.Combine(testDirectory.FullName, "FileTwo"));
            FileInfo      fileThree        = new FileInfo(Path.Combine(testSubdirectory.FullName, "FileThree"));
            FileInfo      fileFour         = new FileInfo(Path.Combine(testSubdirectory.FullName, "FileFour"));

            fileOne.Create().Dispose();
            fileTwo.Create().Dispose();
            fileThree.Create().Dispose();
            fileFour.Create().Dispose();

            string[] paths = GetPaths(testDirectory.FullName, "file*", new EnumerationOptions {
                MatchCasing = MatchCasing.CaseSensitive, RecurseSubdirectories = true
            });

            Assert.Empty(paths);

            paths = GetPaths(testDirectory.FullName, "file*", new EnumerationOptions {
                MatchCasing = MatchCasing.CaseInsensitive, RecurseSubdirectories = true
            });
            FSAssert.EqualWhenOrdered(new string[] { fileOne.FullName, fileTwo.FullName, fileThree.FullName, fileFour.FullName }, paths);

            paths = GetPaths(testDirectory.FullName, "FileT*", new EnumerationOptions {
                MatchCasing = MatchCasing.CaseSensitive, RecurseSubdirectories = true
            });
            FSAssert.EqualWhenOrdered(new string[] { fileTwo.FullName, fileThree.FullName }, paths);

            paths = GetPaths(testDirectory.FullName, "File???", new EnumerationOptions {
                MatchCasing = MatchCasing.CaseSensitive, RecurseSubdirectories = true
            });
            FSAssert.EqualWhenOrdered(new string[] { fileOne.FullName, fileTwo.FullName }, paths);
        }
        public void StarDotBehavior()
        {
            DirectoryInfo testDirectory = Directory.CreateDirectory(GetTestFilePath());
            FileInfo      fileOne       = new FileInfo(Path.Combine(testDirectory.FullName, "one"));
            FileInfo      fileTwo       = new FileInfo(Path.Combine(testDirectory.FullName, "one.two"));
            string        fileThree     = Path.Combine(testDirectory.FullName, "three.");

            fileOne.Create().Dispose();
            fileTwo.Create().Dispose();

            // Need extended device syntax to create a name with a trailing dot.
            File.Create(PlatformDetection.IsWindows ? @"\\?\" + fileThree : fileThree).Dispose();

            // *. means any file without an extension
            string[] paths = GetPaths(testDirectory.FullName, "*.", new EnumerationOptions {
                MatchType = MatchType.Win32
            });
            FSAssert.EqualWhenOrdered(new string[] { fileOne.FullName, fileThree }, paths);

            // Simple, anything with a trailing period
            paths = GetPaths(testDirectory.FullName, "*.", new EnumerationOptions {
                MatchType = MatchType.Simple
            });
            FSAssert.EqualWhenOrdered(new string[] { fileThree }, paths);
        }
        public void QuestionMarkBehavior()
        {
            DirectoryInfo testDirectory = Directory.CreateDirectory(GetTestFilePath());
            FileInfo      fileOne       = new FileInfo(Path.Combine(testDirectory.FullName, "a.one"));
            FileInfo      fileTwo       = new FileInfo(Path.Combine(testDirectory.FullName, "ab.two"));
            FileInfo      fileThree     = new FileInfo(Path.Combine(testDirectory.FullName, "abc.three"));

            fileOne.Create().Dispose();
            fileTwo.Create().Dispose();
            fileThree.Create().Dispose();

            // Question marks collapse to periods in Win32
            string[] paths = GetPaths(testDirectory.FullName, "a??.*", new EnumerationOptions {
                MatchType = MatchType.Win32
            });
            FSAssert.EqualWhenOrdered(new string[] { fileOne.FullName, fileTwo.FullName, fileThree.FullName }, paths);

            paths = GetPaths(testDirectory.FullName, "*.?????", new EnumerationOptions {
                MatchType = MatchType.Win32
            });
            FSAssert.EqualWhenOrdered(new string[] { fileOne.FullName, fileTwo.FullName, fileThree.FullName }, paths);

            // Simple, one question mark is one character
            paths = GetPaths(testDirectory.FullName, "a??.*", new EnumerationOptions {
                MatchType = MatchType.Simple
            });
            FSAssert.EqualWhenOrdered(new string[] { fileThree.FullName }, paths);

            paths = GetPaths(testDirectory.FullName, "*.?????", new EnumerationOptions {
                MatchType = MatchType.Simple
            });
            FSAssert.EqualWhenOrdered(new string[] { fileThree.FullName }, paths);
        }
        public void SkippingHiddenFiles()
        {
            DirectoryInfo testDirectory    = Directory.CreateDirectory(GetTestFilePath());
            DirectoryInfo testSubdirectory = Directory.CreateDirectory(Path.Combine(testDirectory.FullName, GetTestFileName()));
            FileInfo      fileOne          = new FileInfo(Path.Combine(testDirectory.FullName, GetTestFileName()));

            // Put a period in front to make it hidden on Unix
            FileInfo fileTwo   = new FileInfo(Path.Combine(testDirectory.FullName, "." + GetTestFileName()));
            FileInfo fileThree = new FileInfo(Path.Combine(testSubdirectory.FullName, GetTestFileName()));
            FileInfo fileFour  = new FileInfo(Path.Combine(testSubdirectory.FullName, "." + GetTestFileName()));

            fileOne.Create().Dispose();
            fileTwo.Create().Dispose();
            if (PlatformDetection.IsWindows)
            {
                fileTwo.Attributes = fileTwo.Attributes | FileAttributes.Hidden;
            }
            fileThree.Create().Dispose();
            fileFour.Create().Dispose();
            if (PlatformDetection.IsWindows)
            {
                fileFour.Attributes = fileTwo.Attributes | FileAttributes.Hidden;
            }

            // Default EnumerationOptions is to skip hidden
            string[] paths = GetPaths(testDirectory.FullName, new EnumerationOptions());
            Assert.Equal(new string[] { fileOne.FullName }, paths);

            paths = GetPaths(testDirectory.FullName, new EnumerationOptions {
                AttributesToSkip = 0
            });
            FSAssert.EqualWhenOrdered(new string[] { fileOne.FullName, fileTwo.FullName }, paths);

            paths = GetPaths(testDirectory.FullName, new EnumerationOptions {
                RecurseSubdirectories = true
            });
            Assert.Equal(new string[] { fileOne.FullName, fileThree.FullName }, paths);

            if (PlatformDetection.IsWindows)
            {
                // Shouldn't recurse into the subdirectory now that it is hidden
                testSubdirectory.Attributes = testSubdirectory.Attributes | FileAttributes.Hidden;
            }
            else
            {
                Directory.Move(testSubdirectory.FullName, Path.Combine(testDirectory.FullName, "." + testSubdirectory.Name));
            }

            paths = GetPaths(testDirectory.FullName, new EnumerationOptions {
                RecurseSubdirectories = true
            });
            Assert.Equal(new string[] { fileOne.FullName }, paths);
        }
Пример #5
0
        public void GetFiles_WildcardPatternIsTranslated(string pattern)
        {
            DirectoryInfo testDirectory = Directory.CreateDirectory(GetTestFilePath());
            FileInfo      fileOne       = new FileInfo(Path.Combine(testDirectory.FullName, "File.One"));
            FileInfo      fileTwo       = new FileInfo(Path.Combine(testDirectory.FullName, "FileTwo"));

            fileOne.Create().Dispose();
            fileTwo.Create().Dispose();
            string[] results = GetFiles(testDirectory.FullName, pattern);
            FSAssert.EqualWhenOrdered(new string[] { fileOne.FullName, fileTwo.FullName }, results);

            results = GetFiles(testDirectory.FullName, pattern, new EnumerationOptions {
                MatchType = MatchType.Win32
            });
            FSAssert.EqualWhenOrdered(new string[] { fileOne.FullName, fileTwo.FullName }, results);
        }
        public void CustomExtensionMatch()
        {
            DirectoryInfo testDirectory    = Directory.CreateDirectory(GetTestFilePath());
            DirectoryInfo testSubdirectory = Directory.CreateDirectory(Path.Combine(testDirectory.FullName, "Subdirectory"));
            FileInfo      fileOne          = new FileInfo(Path.Combine(testDirectory.FullName, "fileone.htm"));
            FileInfo      fileTwo          = new FileInfo(Path.Combine(testDirectory.FullName, "filetwo.html"));
            FileInfo      fileThree        = new FileInfo(Path.Combine(testSubdirectory.FullName, "filethree.doc"));
            FileInfo      fileFour         = new FileInfo(Path.Combine(testSubdirectory.FullName, "filefour.docx"));

            fileOne.Create().Dispose();
            fileTwo.Create().Dispose();
            fileThree.Create().Dispose();
            fileFour.Create().Dispose();

            string[] paths = GetFileFullPathsWithExtension(testDirectory.FullName, true, ".htm", ".doc").ToArray();

            FSAssert.EqualWhenOrdered(new string[] { fileOne.FullName, fileThree.FullName }, paths);
        }
        public void GetFileNamesEnumerable()
        {
            DirectoryInfo testDirectory = Directory.CreateDirectory(GetTestFilePath());

            File.Create(Path.Join(testDirectory.FullName, "one")).Dispose();
            File.Create(Path.Join(testDirectory.FullName, "two")).Dispose();
            Directory.CreateDirectory(Path.Join(testDirectory.FullName, "three"));

            IEnumerable <string> fileNames =
                new FileSystemEnumerable <string>(
                    testDirectory.FullName,
                    (ref FileSystemEntry entry) => entry.FileName.ToString())
            {
                ShouldIncludePredicate = (ref FileSystemEntry entry) => !entry.IsDirectory
            };

            FSAssert.EqualWhenOrdered(new string[] { "one", "two" }, fileNames);
        }
Пример #8
0
        public void GetFileNamesEnumerable()
        {
            // https://blogs.msdn.microsoft.com/jeremykuhne/2018/03/09/custom-directory-enumeration-in-net-core-2-1/
            DirectoryInfo testDirectory = Directory.CreateDirectory(GetTestFilePath());

            File.Create(Path.Join(testDirectory.FullName, "one")).Dispose();
            File.Create(Path.Join(testDirectory.FullName, "two")).Dispose();
            Directory.CreateDirectory(Path.Join(testDirectory.FullName, "three"));

            IEnumerable <string> fileNames =
                new FileSystemEnumerable <string>(
                    testDirectory.FullName,
                    (ref FileSystemEntry entry) => entry.FileName.ToString())
            {
                ShouldIncludePredicate = (ref FileSystemEntry entry) => !entry.IsDirectory
            };

            FSAssert.EqualWhenOrdered(new string[] { "one", "two" }, fileNames);
        }
Пример #9
0
        public void GetFiles_EmptyPattern()
        {
            DirectoryInfo testDirectory = Directory.CreateDirectory(GetTestFilePath());
            FileInfo      fileOne       = new FileInfo(Path.Combine(testDirectory.FullName, "File.One"));
            FileInfo      fileTwo       = new FileInfo(Path.Combine(testDirectory.FullName, "FileTwo"));

            fileOne.Create().Dispose();
            fileTwo.Create().Dispose();

            // We allow for expression to be "foo\" which would translate to "foo\*".
            string[] results = GetFiles(testDirectory.Parent.FullName, testDirectory.Name + Path.DirectorySeparatorChar);
            FSAssert.EqualWhenOrdered(new string[] { fileOne.FullName, fileTwo.FullName }, results);

            results = GetFiles(testDirectory.Parent.FullName, testDirectory.Name + Path.AltDirectorySeparatorChar);
            FSAssert.EqualWhenOrdered(new string[] { fileOne.FullName, fileTwo.FullName }, results);

            results = GetFiles(testDirectory.FullName, string.Empty);
            FSAssert.EqualWhenOrdered(new string[] { fileOne.FullName, fileTwo.FullName }, results);
        }
Пример #10
0
        public void TrimmedPathsAreFound_Windows()
        {
            // Trailing spaces and periods are eaten when normalizing in Windows, making them impossible
            // to access without using the \\?\ device syntax. We should, however, be able to find them
            // and retain the filename in the info classes and string results.

            DirectoryInfo directory = Directory.CreateDirectory(GetTestFilePath());

            File.Create(@"\\?\" + Path.Combine(directory.FullName, "Trailing space ")).Dispose();
            File.Create(@"\\?\" + Path.Combine(directory.FullName, "Trailing period.")).Dispose();

            FileInfo[] files = directory.GetFiles();
            Assert.Equal(2, files.Count());
            FSAssert.EqualWhenOrdered(new string[] { "Trailing space ", "Trailing period." }, files.Select(f => f.Name));

            var paths = Directory.GetFiles(directory.FullName);

            Assert.Equal(2, paths.Count());
            FSAssert.EqualWhenOrdered(new string[] { "Trailing space ", "Trailing period." }, paths.Select(p => Path.GetFileName(p)));
        }
Пример #11
0
        public void TestGetFilesWithExtensions()
        {
            // https://blogs.msdn.microsoft.com/jeremykuhne/2018/03/09/custom-directory-enumeration-in-net-core-2-1/
            DirectoryInfo testDirectory = Directory.CreateDirectory(GetTestFilePath());

            File.Create(Path.Join(testDirectory.FullName, "file.one")).Dispose();
            File.Create(Path.Join(testDirectory.FullName, "file.two")).Dispose();
            File.Create(Path.Join(testDirectory.FullName, "file.three")).Dispose();
            DirectoryInfo subDirectory = testDirectory.CreateSubdirectory("three.one");

            File.Create(Path.Join(subDirectory.FullName, "subfile.one")).Dispose();

            FSAssert.EqualWhenOrdered(
                new string[] { "file.one", "file.three" },
                GetFilesWithExtensions(testDirectory.FullName, false, ".one", ".three").Select(f => f.Name));

            FSAssert.EqualWhenOrdered(
                new string[] { "file.one", "file.three", "subfile.one" },
                GetFilesWithExtensions(testDirectory.FullName, true, ".one", ".three").Select(f => f.Name));
        }
        public void SkipComesFirst()
        {
            // If skip comes first we shouldn't find ourselves recursing.
            DirectoryInfo testDirectory    = Directory.CreateDirectory(GetTestFilePath());
            DirectoryInfo testSubdirectory = Directory.CreateDirectory(Path.Combine(testDirectory.FullName, GetTestFileName()));

            FileInfo fileOne = new FileInfo(Path.Combine(testDirectory.FullName, GetTestFileName()));
            FileInfo fileTwo = new FileInfo(Path.Combine(testDirectory.FullName, GetTestFileName()));

            FileInfo fileThree = new FileInfo(Path.Combine(testSubdirectory.FullName, GetTestFileName()));
            FileInfo fileFour  = new FileInfo(Path.Combine(testSubdirectory.FullName, GetTestFileName()));

            fileOne.Create().Dispose();
            fileTwo.Create().Dispose();
            fileThree.Create().Dispose();
            fileFour.Create().Dispose();

            string[] paths = GetPaths(testDirectory.FullName, new EnumerationOptions {
                AttributesToSkip = FileAttributes.Directory, RecurseSubdirectories = true
            });
            FSAssert.EqualWhenOrdered(new string[] { fileOne.FullName, fileTwo.FullName }, paths);
        }