Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions snippets/csharp/System.IO/Directory/EnumerateFiles/program3.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// <Snippet1>
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);
}
}
}
// </Snippet1>
38 changes: 38 additions & 0 deletions snippets/csharp/System.IO/Directory/Overview/class8.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// <Snippet16>
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);
}
}
}
}
// </Snippet16>
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@
<Compile Include="program1.fs" />
<Compile Include="program2.fs" />
<Compile Include="program.fs" />
<Compile Include="program3.fs" />
</ItemGroup>
</Project>
</Project>
35 changes: 35 additions & 0 deletions snippets/fsharp/System.IO/Directory/EnumerateFiles/program3.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
module program3

// <Snippet1>
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}"
// </Snippet1>
23 changes: 23 additions & 0 deletions snippets/fsharp/System.IO/Directory/Overview/class8.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
module class8

// <Snippet16>
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}"
// </Snippet16>
3 changes: 2 additions & 1 deletion snippets/fsharp/System.IO/Directory/Overview/fs.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@
<Compile Include="class4.fs" />
<Compile Include="class5.fs" />
<Compile Include="class1.fs" />
<Compile Include="class8.fs" />
</ItemGroup>
</Project>
</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
' <Snippet1>
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
' </Snippet1>
27 changes: 27 additions & 0 deletions snippets/visualbasic/System.IO/Directory/Overview/class8.vb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
' <Snippet16>
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
' </Snippet16>
13 changes: 13 additions & 0 deletions xml/System.IO/Directory.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1377,6 +1377,19 @@ The returned collection is not cached. Each call to the <xref:System.Collections

The returned collection is not cached. Each call to the <xref:System.Collections.Generic.IEnumerable%601.GetEnumerator%2A> 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":::

]]></format>
</remarks>
<exception cref="T:System.ArgumentException">.NET Framework and .NET Core versions older than 2.1: <paramref name="path" /> is a zero-length string, contains only white space, or contains invalid characters. You can query for invalid characters by using the <see cref="M:System.IO.Path.GetInvalidPathChars" /> method.
Expand Down
Loading