diff --git a/snippets/csharp/System.IO/Directory/EnumerateFiles/program3.cs b/snippets/csharp/System.IO/Directory/EnumerateFiles/program3.cs new file mode 100644 index 00000000000..9a4332835cc --- /dev/null +++ b/snippets/csharp/System.IO/Directory/EnumerateFiles/program3.cs @@ -0,0 +1,50 @@ +// +using System; +using System.IO; +using System.Linq; + +class Program +{ + static void Main(string[] args) + { + try + { + // Set a variable to the My Documents path. + string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); + + // Set the options for the enumeration. + var options = new EnumerationOptions() + { + IgnoreInaccessible = true, + MatchCasing = MatchCasing.CaseInsensitive, + MatchType = MatchType.Simple, + RecurseSubdirectories = true + }; + + var files = from file in Directory.EnumerateFiles(docPath, "*.txt", options) + from line in File.ReadLines(file) + where line.Contains("Microsoft") + select new + { + File = file, + Line = line + }; + + foreach (var f in files) + { + Console.WriteLine($"{f.File}\t{f.Line}"); + } + + Console.WriteLine($"{files.Count()} files found."); + } + catch (PathTooLongException pathEx) + { + Console.WriteLine(pathEx.Message); + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + } +} +// diff --git a/snippets/csharp/System.IO/Directory/Overview/class8.cs b/snippets/csharp/System.IO/Directory/Overview/class8.cs new file mode 100644 index 00000000000..ff38b304542 --- /dev/null +++ b/snippets/csharp/System.IO/Directory/Overview/class8.cs @@ -0,0 +1,38 @@ +// +using System; +using System.IO; + +namespace ConsoleApplication +{ + class Program + { + static void Main(string[] args) + { + string sourceDirectory = @"C:\current"; + string archiveDirectory = @"C:\archive"; + + var options = new EnumerationOptions() + { + MatchCasing = MatchCasing.CaseInsensitive, + MatchType = MatchType.Simple, + RecurseSubdirectories = true + }; + + try + { + var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt", options); + + foreach (string currentFile in txtFiles) + { + string fileName = currentFile.Substring(sourceDirectory.Length + 1); + Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName)); + } + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + } + } +} +// diff --git a/snippets/fsharp/System.IO/Directory/EnumerateFiles/fs.fsproj b/snippets/fsharp/System.IO/Directory/EnumerateFiles/fs.fsproj index 7f314d88392..087402d6ce5 100644 --- a/snippets/fsharp/System.IO/Directory/EnumerateFiles/fs.fsproj +++ b/snippets/fsharp/System.IO/Directory/EnumerateFiles/fs.fsproj @@ -8,5 +8,6 @@ + - \ No newline at end of file + diff --git a/snippets/fsharp/System.IO/Directory/EnumerateFiles/program3.fs b/snippets/fsharp/System.IO/Directory/EnumerateFiles/program3.fs new file mode 100644 index 00000000000..e3cec311b05 --- /dev/null +++ b/snippets/fsharp/System.IO/Directory/EnumerateFiles/program3.fs @@ -0,0 +1,35 @@ +module program3 + +// +open System +open System.IO + +try + // Set a variable to the My Documents path. + let docPath = + Environment.GetFolderPath Environment.SpecialFolder.MyDocuments + + // Set the options for the enumeration. + let options = new EnumerationOptions( + IgnoreInaccessible = true, + MatchCasing = MatchCasing.CaseInsensitive, + MatchType = MatchType.Simple, + RecurseSubdirectories = true + ) + + let files = + query { + for file in Directory.EnumerateFiles(docPath, "*.txt", options) do + for line in File.ReadLines file do + where (line.Contains "Microsoft") + select {| File = file; Line = line |} + } + + for f in files do + printfn $"{f.File}\t{f.Line}" + + printfn $"{Seq.length files} files found." +with +| :? PathTooLongException as pathEx -> printfn $"{pathEx.Message}" +| ex -> printfn $"{ex.Message}" +// diff --git a/snippets/fsharp/System.IO/Directory/Overview/class8.fs b/snippets/fsharp/System.IO/Directory/Overview/class8.fs new file mode 100644 index 00000000000..3098c9765b9 --- /dev/null +++ b/snippets/fsharp/System.IO/Directory/Overview/class8.fs @@ -0,0 +1,23 @@ +module class8 + +// +open System.IO + +let sourceDirectory = @"C:\current" +let archiveDirectory = @"C:\archive" + +let options = new EnumerationOptions( + MatchCasing = MatchCasing.CaseInsensitive, + MatchType = MatchType.Simple, + RecurseSubdirectories = true +) + +try + let txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt", options) + + for currentFile in txtFiles do + let fileName = currentFile.Substring(sourceDirectory.Length + 1) + Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName)) +with ex -> + printfn $"{ex.Message}" +// diff --git a/snippets/fsharp/System.IO/Directory/Overview/fs.fsproj b/snippets/fsharp/System.IO/Directory/Overview/fs.fsproj index f38a7e6ad16..11fcb6f7400 100644 --- a/snippets/fsharp/System.IO/Directory/Overview/fs.fsproj +++ b/snippets/fsharp/System.IO/Directory/Overview/fs.fsproj @@ -12,5 +12,6 @@ + - \ No newline at end of file + diff --git a/snippets/visualbasic/System.IO/Directory/EnumerateFiles/program2.vb b/snippets/visualbasic/System.IO/Directory/EnumerateFiles/program2.vb new file mode 100644 index 00000000000..630513758c6 --- /dev/null +++ b/snippets/visualbasic/System.IO/Directory/EnumerateFiles/program2.vb @@ -0,0 +1,39 @@ +' +Imports System.IO +Imports System.Xml.Linq + +Module Module1 + Sub Main() + Try + ' Set a variable to the My Documents Path. + Dim docPath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + + ' Set the options for the enumeration. + Dim options As New EnumerationOptions() With { + .IgnoreInaccessible = True, + .MatchCasing = MatchCasing.CaseInsensitive, + .MatchType = MatchType.Simple, + .RecurseSubdirectories = True + } + + Dim files = From chkFile In Directory.EnumerateFiles(docPath, "*.txt", options) + From line In File.ReadLines(chkFile) + Where line.Contains("Microsoft") + Select New With { + .curFile = chkFile, + .curLine = line + } + + For Each f In files + Console.WriteLine($"{f.curFile}\t{f.curLine}") + Next + + Console.WriteLine($"{files.Count} files found.") + Catch pathEx As PathTooLongException + Console.WriteLine(pathEx.Message) + Catch ex As Exception + Console.WriteLine(ex.Message) + End Try + End Sub +End Module +' diff --git a/snippets/visualbasic/System.IO/Directory/Overview/class8.vb b/snippets/visualbasic/System.IO/Directory/Overview/class8.vb new file mode 100644 index 00000000000..23149927256 --- /dev/null +++ b/snippets/visualbasic/System.IO/Directory/Overview/class8.vb @@ -0,0 +1,27 @@ +' +Imports System.IO + +Module Module1 + Sub Main() + Dim sourceDirectory As String = "C:\current" + Dim archiveDirectory As String = "C:\archive" + + Dim options As New EnumerationOptions() With { + .MatchCasing = MatchCasing.CaseInsensitive, + .MatchType = MatchType.Simple, + .RecurseSubdirectories = True + } + + Try + Dim txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt", options) + + For Each currentFile As String In txtFiles + Dim fileName = currentFile.Substring(sourceDirectory.Length + 1) + Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName)) + Next + Catch ex As Exception + Console.WriteLine(ex.Message) + End Try + End Sub +End Module +' diff --git a/xml/System.IO/Directory.xml b/xml/System.IO/Directory.xml index 01841e2d0c2..7846554641f 100644 --- a/xml/System.IO/Directory.xml +++ b/xml/System.IO/Directory.xml @@ -1377,6 +1377,19 @@ The returned collection is not cached. Each call to the on the collection starts a new enumeration. +## Examples + The following example shows how to retrieve all the text files in a directory and its subdirectories, and move them to a new directory. After the files are moved, they no longer exist in the original directories. + + :::code language="csharp" source="~/snippets/csharp/System.IO/Directory/Overview/class8.cs" id="Snippet16"::: + :::code language="fsharp" source="~/snippets/fsharp/System.IO/Directory/Overview/class8.fs" id="Snippet16"::: + :::code language="vb" source="~/snippets/visualbasic/System.IO/Directory/Overview/class8.vb" id="Snippet16"::: + + The following example recursively enumerates all files with the `.txt` extension, ignoring inaccessible directories and files. It reads each line of the file and displays the line if it contains the string "Microsoft". + + :::code language="csharp" source="~/snippets/csharp/System.IO/Directory/EnumerateFiles/program3.cs" id="Snippet1"::: + :::code language="fsharp" source="~/snippets/fsharp/System.IO/Directory/EnumerateFiles/program3.fs" id="Snippet1"::: + :::code language="vb" source="~/snippets/visualbasic/System.IO/Directory/EnumerateFiles/program2.vb" id="Snippet1"::: + ]]> .NET Framework and .NET Core versions older than 2.1: is a zero-length string, contains only white space, or contains invalid characters. You can query for invalid characters by using the method.