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.