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); }
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); }
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); }
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); }
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))); }
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); }