Directory.EnumerateFiles Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Zwraca wyliczaną kolekcję pełnych nazw plików spełniających określone kryteria.
Przeciążenia
EnumerateFiles(String, String, SearchOption) |
Zwraca wyliczalną kolekcję pełnych nazw plików pasujących do wzorca wyszukiwania w określonej ścieżce i opcjonalnie wyszukuje podkatalogi. |
EnumerateFiles(String, String, EnumerationOptions) |
Zwraca wyliczenie kolekcji pełnych nazw plików pasujących do wzorca wyszukiwania i opcji wyliczenia w określonej ścieżce oraz opcjonalnie wyszukuje podkatalogi. |
EnumerateFiles(String) |
Zwraca wyliczalną kolekcję pełnych nazw plików w określonej ścieżce. |
EnumerateFiles(String, String) |
Zwraca wyliczalną kolekcję pełnych nazw plików pasujących do wzorca wyszukiwania w określonej ścieżce. |
EnumerateFiles(String, String, SearchOption)
- Źródło:
- Directory.cs
- Źródło:
- Directory.cs
- Źródło:
- Directory.cs
Zwraca wyliczalną kolekcję pełnych nazw plików pasujących do wzorca wyszukiwania w określonej ścieżce i opcjonalnie wyszukuje podkatalogi.
public:
static System::Collections::Generic::IEnumerable<System::String ^> ^ EnumerateFiles(System::String ^ path, System::String ^ searchPattern, System::IO::SearchOption searchOption);
public static System.Collections.Generic.IEnumerable<string> EnumerateFiles (string path, string searchPattern, System.IO.SearchOption searchOption);
static member EnumerateFiles : string * string * System.IO.SearchOption -> seq<string>
Public Shared Function EnumerateFiles (path As String, searchPattern As String, searchOption As SearchOption) As IEnumerable(Of String)
Parametry
- path
- String
Ścieżka względna lub bezwzględna do katalogu do wyszukiwania. W tym ciągu nie jest rozróżniana wielkość liter.
- searchPattern
- String
Ciąg wyszukiwania zgodny z nazwami plików w pliku path
. Ten parametr może zawierać kombinację prawidłowych znaków literału i symboli wieloznacznych (* i ?), ale nie obsługuje wyrażeń regularnych.
- searchOption
- SearchOption
Jedna z wartości wyliczenia określająca, czy operacja wyszukiwania powinna zawierać tylko bieżący katalog, czy powinna zawierać wszystkie podkatalogi. Wartość domyślna to TopDirectoryOnly.
Zwraca
Wyliczenie kolekcji pełnych nazw (w tym ścieżek) dla plików w katalogu określonym przez path
i które są zgodne z określonym wzorcem wyszukiwania i opcją wyszukiwania.
Wyjątki
.NET Framework i .NET Core w wersjach starszych niż 2.1: path
jest ciągiem o zerowej długości, zawiera tylko białe znaki lub zawiera nieprawidłowe znaki. Możesz wykonać zapytanie o nieprawidłowe znaki przy użyciu GetInvalidPathChars() metody .
-lub-
searchPattern
nie zawiera prawidłowego wzorca.
searchOption
jest nieprawidłową SearchOption wartością.
path
jest nieprawidłowy, na przykład odwoływania się do niezamapowanego dysku.
path
to nazwa pliku.
Określona ścieżka, nazwa pliku lub połączenie przekraczają maksymalną długość zdefiniowaną przez system.
Obiekt wywołujący nie posiada wymaganych uprawnień.
Obiekt wywołujący nie posiada wymaganych uprawnień.
Przykłady
W poniższym przykładzie pokazano, jak pobrać wszystkie pliki tekstowe w katalogu i jego podkatalogach i przenieść je do nowego katalogu. Po przeniesieniu plików nie istnieją już w oryginalnych katalogach.
using System;
using System.IO;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
string sourceDirectory = @"C:\current";
string archiveDirectory = @"C:\archive";
try
{
var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt", SearchOption.AllDirectories);
foreach (string currentFile in txtFiles)
{
string fileName = currentFile.Substring(sourceDirectory.Length + 1);
Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName));
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
open System.IO
let sourceDirectory = @"C:\current"
let archiveDirectory = @"C:\archive"
try
let txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt", SearchOption.AllDirectories)
for currentFile in txtFiles do
let fileName = currentFile.Substring(sourceDirectory.Length + 1)
Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
with e ->
printfn $"{e.Message}"
Imports System.IO
Module Module1
Sub Main()
Dim sourceDirectory As String = "C:\current"
Dim archiveDirectory As String = "C:\archive"
Try
Dim txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt", SearchOption.AllDirectories)
For Each currentFile As String In txtFiles
Dim fileName = currentFile.Substring(sourceDirectory.Length + 1)
Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
Next
Catch e As Exception
Console.WriteLine(e.Message)
End Try
End Sub
End Module
Poniższy przykład rekursywnie wylicza wszystkie pliki, które mają rozszerzenie .txt
, odczytuje każdy wiersz pliku i wyświetla wiersz, jeśli zawiera ciąg "Microsoft".
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);
var files = from file in Directory.EnumerateFiles(docPath, "*.txt", SearchOption.AllDirectories)
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().ToString()} files found.");
}
catch (UnauthorizedAccessException uAEx)
{
Console.WriteLine(uAEx.Message);
}
catch (PathTooLongException pathEx)
{
Console.WriteLine(pathEx.Message);
}
}
}
open System
open System.IO
try
// Set a variable to the My Documents path.
let docPath =
Environment.GetFolderPath Environment.SpecialFolder.MyDocuments
let files =
query {
for file in Directory.EnumerateFiles(docPath, "*.txt", SearchOption.AllDirectories) 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
| :? UnauthorizedAccessException as uAEx -> printfn $"{uAEx.Message}"
| :? PathTooLongException as pathEx -> printfn $"{pathEx.Message}"
Imports System.IO
Imports System.Xml.Linq
Module Module1
Sub Main()
Try
Dim docPath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Dim files = From chkFile In Directory.EnumerateFiles(docPath, "*.txt", SearchOption.AllDirectories)
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.File}\t{f.Line}")
Next
Console.WriteLine($"{files.Count} files found.")
Catch uAEx As UnauthorizedAccessException
Console.WriteLine(uAEx.Message)
Catch pathEx As PathTooLongException
Console.WriteLine(pathEx.Message)
End Try
End Sub
End Module
Uwagi
searchPattern
może być kombinacją literałów i symboli wieloznacznych, ale nie obsługuje wyrażeń regularnych. Następujące specyfikatory symboli wieloznacznych są dozwolone w pliku searchPattern
.
Specyfikator symboli wieloznacznych | Jest zgodny z |
---|---|
* (gwiazdka) | Zero lub więcej znaków w tej pozycji. |
? (znak zapytania) | Dokładnie jeden znak w tej pozycji. |
Znaki inne niż symbol wieloznaczny to znaki literału. Na przykład searchPattern
ciąg "*t" wyszukuje wszystkie nazwy path
kończące się literą "t". Ciąg searchPattern
"s*" wyszukuje wszystkie nazwy path
na początku litery "s".
Uwaga
.NET Framework tylko: w przypadku używania symbolu wieloznakowego gwiazdki i searchPattern
określenia rozszerzenia pliku trzyznaczne, na przykład "*.txt", ta metoda zwraca również pliki z rozszerzeniami rozpoczynającymi się od określonego rozszerzenia. Na przykład wzorzec wyszukiwania "*.xls" zwraca zarówno "book.xls" jak i "book.xlsx". To zachowanie występuje tylko wtedy, gdy gwiazdka jest używana we wzorcu wyszukiwania, a podane rozszerzenie pliku ma dokładnie trzy znaki. Jeśli używasz znaku wieloznakowego znaku zapytania gdzieś w wzorcu wyszukiwania, ta metoda zwraca tylko pliki zgodne z określonym rozszerzeniem pliku dokładnie. W poniższej tabeli przedstawiono tę anomalię w .NET Framework.
Pliki w katalogu | Wzorzec wyszukiwania | Zwracany jest program .NET 5+ | .NET Framework zwraca |
---|---|---|---|
file.ai, file.aif | *.Ai | file.ai | file.ai |
book.xls, book.xlsx | *.xls | book.xls | book.xls, book.xlsx |
ello.txt, hello.txt, hello.txtt | ?ello.txt | hello.txt | hello.txt |
searchPattern
nie może kończyć się dwoma kropkami ("..") lub zawierać dwa kropki (".)."), po DirectorySeparatorChar których następuje lub AltDirectorySeparatorChar, ani nie może zawierać żadnych nieprawidłowych znaków. Możesz wykonać zapytanie o nieprawidłowe znaki przy użyciu GetInvalidPathChars metody .
Możesz określić informacje o ścieżce względnej za pomocą parametru path
. Informacje o ścieżce względnej są interpretowane jako względem bieżącego katalogu roboczego, który można określić przy użyciu GetCurrentDirectory metody .
Metody EnumerateFiles i GetFiles różnią się w następujący sposób: w przypadku użycia EnumerateFilesmetody można rozpocząć wyliczanie kolekcji nazw przed zwróceniem całej kolekcji. Gdy używasz metody GetFiles, musisz poczekać na zwrócenie całej tablicy nazw, zanim będzie można uzyskać dostęp do tablicy. W związku z tym podczas pracy z wieloma plikami i katalogami EnumerateFiles może być wydajniejszy.
Zwrócona kolekcja nie jest buforowana. Każde wywołanie elementu GetEnumerator w kolekcji rozpoczyna nową wyliczenie.
Dotyczy
EnumerateFiles(String, String, EnumerationOptions)
- Źródło:
- Directory.cs
- Źródło:
- Directory.cs
- Źródło:
- Directory.cs
Zwraca wyliczenie kolekcji pełnych nazw plików pasujących do wzorca wyszukiwania i opcji wyliczenia w określonej ścieżce oraz opcjonalnie wyszukuje podkatalogi.
public:
static System::Collections::Generic::IEnumerable<System::String ^> ^ EnumerateFiles(System::String ^ path, System::String ^ searchPattern, System::IO::EnumerationOptions ^ enumerationOptions);
public static System.Collections.Generic.IEnumerable<string> EnumerateFiles (string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);
static member EnumerateFiles : string * string * System.IO.EnumerationOptions -> seq<string>
Public Shared Function EnumerateFiles (path As String, searchPattern As String, enumerationOptions As EnumerationOptions) As IEnumerable(Of String)
Parametry
- path
- String
Ścieżka względna lub bezwzględna do katalogu do wyszukiwania. W tym ciągu nie jest rozróżniana wielkość liter.
- searchPattern
- String
Ciąg wyszukiwania zgodny z nazwami plików w pliku path
. Ten parametr może zawierać kombinację prawidłowych znaków literału i symboli wieloznacznych (* i ?), ale nie obsługuje wyrażeń regularnych.
- enumerationOptions
- EnumerationOptions
Obiekt opisujący konfigurację wyszukiwania i wyliczenia do użycia.
Zwraca
Wyliczenie kolekcji pełnych nazw (w tym ścieżek) dla plików w katalogu określonym przez path
i które są zgodne z określonym wzorcem wyszukiwania i opcjami wyliczenia.
Wyjątki
.NET Framework i .NET Core w wersjach starszych niż 2.1: path
jest ciągiem o zerowej długości, zawiera tylko białe znaki lub zawiera nieprawidłowe znaki. Możesz wykonać zapytanie o nieprawidłowe znaki przy użyciu GetInvalidPathChars() metody .
-lub-
searchPattern
nie zawiera prawidłowego wzorca.
searchOption
jest nieprawidłową SearchOption wartością.
path
jest nieprawidłowy, na przykład odwoływania się do niezamapowanego dysku.
path
to nazwa pliku.
Określona ścieżka, nazwa pliku lub połączenie przekraczają maksymalną długość zdefiniowaną przez system.
Obiekt wywołujący nie posiada wymaganych uprawnień.
Uwagi
searchPattern
może być kombinacją literałów i symboli wieloznacznych, ale nie obsługuje wyrażeń regularnych. Następujące specyfikatory symboli wieloznacznych są dozwolone w pliku searchPattern
.
Specyfikator symboli wieloznacznych | Jest zgodny z |
---|---|
* (gwiazdka) | Zero lub więcej znaków w tej pozycji. |
? (znak zapytania) | Dokładnie jeden znak w tej pozycji. |
Znaki inne niż symbol wieloznaczny to znaki literału. Na przykład searchPattern
ciąg "*t" wyszukuje wszystkie nazwy path
kończące się literą "t". Ciąg searchPattern
"s*" wyszukuje wszystkie nazwy path
na początku litery "s".
Uwaga
.NET Framework tylko: w przypadku używania symbolu wieloznakowego gwiazdki i searchPattern
określenia rozszerzenia pliku trzyznaczne, na przykład "*.txt", ta metoda zwraca również pliki z rozszerzeniami rozpoczynającymi się od określonego rozszerzenia. Na przykład wzorzec wyszukiwania "*.xls" zwraca zarówno "book.xls" jak i "book.xlsx". To zachowanie występuje tylko wtedy, gdy gwiazdka jest używana we wzorcu wyszukiwania, a podane rozszerzenie pliku ma dokładnie trzy znaki. Jeśli używasz znaku wieloznakowego znaku zapytania gdzieś w wzorcu wyszukiwania, ta metoda zwraca tylko pliki zgodne z określonym rozszerzeniem pliku dokładnie. W poniższej tabeli przedstawiono tę anomalię w .NET Framework.
Pliki w katalogu | Wzorzec wyszukiwania | Zwracany jest program .NET 5+ | .NET Framework zwraca |
---|---|---|---|
file.ai, file.aif | *.Ai | file.ai | file.ai |
book.xls, book.xlsx | *.xls | book.xls | book.xls, book.xlsx |
ello.txt, hello.txt, hello.txtt | ?ello.txt | hello.txt | hello.txt |
searchPattern
nie może kończyć się dwoma kropkami ("..") lub zawierać dwa kropki (".)."), po DirectorySeparatorChar których następuje lub AltDirectorySeparatorChar, ani nie może zawierać żadnych nieprawidłowych znaków. Możesz wykonać zapytanie o nieprawidłowe znaki przy użyciu GetInvalidPathChars metody .
Możesz określić informacje o ścieżce względnej za pomocą parametru path
. Informacje o ścieżce względnej są interpretowane jako względem bieżącego katalogu roboczego, który można określić przy użyciu GetCurrentDirectory metody .
Metody EnumerateFiles i GetFiles różnią się w następujący sposób: w przypadku użycia EnumerateFilesmetody można rozpocząć wyliczanie kolekcji nazw przed zwróceniem całej kolekcji. Gdy używasz metody GetFiles, musisz poczekać na zwrócenie całej tablicy nazw, zanim będzie można uzyskać dostęp do tablicy. W związku z tym podczas pracy z wieloma plikami i katalogami EnumerateFiles może być wydajniejszy.
Zwrócona kolekcja nie jest buforowana. Każde wywołanie elementu GetEnumerator w kolekcji rozpoczyna nową wyliczenie.
Dotyczy
EnumerateFiles(String)
- Źródło:
- Directory.cs
- Źródło:
- Directory.cs
- Źródło:
- Directory.cs
Zwraca wyliczalną kolekcję pełnych nazw plików w określonej ścieżce.
public:
static System::Collections::Generic::IEnumerable<System::String ^> ^ EnumerateFiles(System::String ^ path);
public static System.Collections.Generic.IEnumerable<string> EnumerateFiles (string path);
static member EnumerateFiles : string -> seq<string>
Public Shared Function EnumerateFiles (path As String) As IEnumerable(Of String)
Parametry
- path
- String
Ścieżka względna lub bezwzględna do katalogu do wyszukiwania. W tym ciągu nie jest rozróżniana wielkość liter.
Zwraca
Wyliczalna kolekcja pełnych nazw (w tym ścieżek) dla plików w katalogu określonym przez path
.
Wyjątki
.NET Framework i .NET Core w wersjach starszych niż 2.1: path
jest ciągiem o zerowej długości, zawiera tylko białe znaki lub zawiera nieprawidłowe znaki. Możesz wykonać zapytanie o nieprawidłowe znaki przy użyciu GetInvalidPathChars() metody .
path
to null
.
path
jest nieprawidłowy, na przykład odwoływania się do niezamapowanego dysku.
path
to nazwa pliku.
Określona ścieżka, nazwa pliku lub połączenie przekraczają maksymalną długość zdefiniowaną przez system.
Obiekt wywołujący nie posiada wymaganych uprawnień.
Obiekt wywołujący nie posiada wymaganych uprawnień.
Przykłady
W poniższym przykładzie pokazano, jak pobrać wszystkie pliki w katalogu i przenieść je do nowego katalogu. Po przeniesieniu plików nie istnieją już w oryginalnym katalogu.
using System;
using System.IO;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
string sourceDirectory = @"C:\current";
string archiveDirectory = @"C:\archive";
try
{
var txtFiles = Directory.EnumerateFiles(sourceDirectory);
foreach (string currentFile in txtFiles)
{
string fileName = currentFile.Substring(sourceDirectory.Length + 1);
Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName));
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
open System.IO
let sourceDirectory = @"C:\current"
let archiveDirectory = @"C:\archive"
try
let txtFiles = Directory.EnumerateFiles sourceDirectory
for currentFile in txtFiles do
let fileName = currentFile.Substring(sourceDirectory.Length + 1)
Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
with e ->
printfn $"{e.Message}"
Imports System.IO
Module Module1
Sub Main()
Dim sourceDirectory As String = "C:\current"
Dim archiveDirectory As String = "C:\archive"
Try
Dim txtFiles = Directory.EnumerateFiles(sourceDirectory)
For Each currentFile As String In txtFiles
Dim fileName = currentFile.Substring(sourceDirectory.Length + 1)
Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
Next
Catch e As Exception
Console.WriteLine(e.Message)
End Try
End Sub
End Module
Poniższy przykład wylicza pliki w określonym katalogu, odczytuje każdy wiersz pliku i wyświetla wiersz, jeśli zawiera ciąg "Europa".
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
class Program
{
static void Main(string[] args)
{
try
{
// LINQ query for all files containing the word 'Europe'.
var files = from file in
Directory.EnumerateFiles(@"\\archives1\library\")
where file.ToLower().Contains("europe")
select file;
foreach (var file in files)
{
Console.WriteLine("{0}", file);
}
Console.WriteLine("{0} files found.", files.Count<string>().ToString());
}
catch (UnauthorizedAccessException UAEx)
{
Console.WriteLine(UAEx.Message);
}
catch (PathTooLongException PathEx)
{
Console.WriteLine(PathEx.Message);
}
}
}
open System
open System.IO
try
// All files containing the word 'Europe'.
let files =
Directory.EnumerateFiles @"\\archives1\library\"
|> Seq.filter (fun file -> file.ToLower().Contains "europe")
for file in files do
printfn $"{file}"
printfn $"{Seq.length files} files found."
with
| :? UnauthorizedAccessException as uaEx ->
printfn $"{uaEx.Message}"
| :? PathTooLongException as pathEx ->
printfn $"{pathEx.Message}"
Imports System.IO
Imports System.Linq
Module Module1
Sub Main()
Try
' LINQ query for all files containing the word 'Europe'.
Dim files = From file In Directory.EnumerateFiles("\\archives1\library\")
Where file.ToLower().Contains("europe")
For Each file In files
Console.WriteLine("{0}", file)
Next
Console.WriteLine("{0} files found.", files.Count.ToString())
Catch UAEx As UnauthorizedAccessException
Console.WriteLine(UAEx.Message)
Catch PathEx As PathTooLongException
Console.WriteLine(PathEx.Message)
End Try
End Sub
End Module
Uwagi
Możesz określić informacje o ścieżce względnej za pomocą parametru path
. Informacje o ścieżce względnej są interpretowane jako względem bieżącego katalogu roboczego, który można określić przy użyciu GetCurrentDirectory metody .
Metody EnumerateFiles i GetFiles różnią się w następujący sposób: w przypadku użycia EnumerateFilesmetody można rozpocząć wyliczanie kolekcji nazw przed zwróceniem całej kolekcji. Gdy używasz metody GetFiles, musisz poczekać na zwrócenie całej tablicy nazw, zanim będzie można uzyskać dostęp do tablicy. W związku z tym podczas pracy z wieloma plikami i katalogami EnumerateFiles może być wydajniejszy.
Zwrócona kolekcja nie jest buforowana; każde wywołanie elementu GetEnumerator w kolekcji rozpocznie nową wyliczenie.
Dotyczy
EnumerateFiles(String, String)
- Źródło:
- Directory.cs
- Źródło:
- Directory.cs
- Źródło:
- Directory.cs
Zwraca wyliczaną kolekcję pełnych nazw plików, które pasują do wzorca wyszukiwania w określonej ścieżce.
public:
static System::Collections::Generic::IEnumerable<System::String ^> ^ EnumerateFiles(System::String ^ path, System::String ^ searchPattern);
public static System.Collections.Generic.IEnumerable<string> EnumerateFiles (string path, string searchPattern);
static member EnumerateFiles : string * string -> seq<string>
Public Shared Function EnumerateFiles (path As String, searchPattern As String) As IEnumerable(Of String)
Parametry
- path
- String
Ścieżka względna lub bezwzględna do katalogu do wyszukiwania. W tym ciągu nie jest rozróżniana wielkość liter.
- searchPattern
- String
Ciąg wyszukiwania zgodny z nazwami plików w pliku path
. Ten parametr może zawierać kombinację prawidłowych znaków literału i symboli wieloznacznych (* i ?), ale nie obsługuje wyrażeń regularnych.
Zwraca
Wyliczalna kolekcja pełnych nazw (w tym ścieżek) dla plików w katalogu określonym przez path
i które są zgodne z określonym wzorcem wyszukiwania.
Wyjątki
.NET Framework i .NET Core w wersjach starszych niż 2.1: path
jest ciągiem o zerowej długości, zawiera tylko białe znaki lub zawiera nieprawidłowe znaki. Możesz wykonać zapytanie o nieprawidłowe znaki przy użyciu GetInvalidPathChars() metody .
-lub-
searchPattern
nie zawiera prawidłowego wzorca.
path
jest nieprawidłowy, na przykład odwoływania się do niezamapowanego dysku.
path
to nazwa pliku.
Określona ścieżka, nazwa pliku lub połączenie przekraczają maksymalną długość zdefiniowaną przez system.
Obiekt wywołujący nie posiada wymaganych uprawnień.
Obiekt wywołujący nie posiada wymaganych uprawnień.
Przykłady
W poniższym przykładzie pokazano, jak pobrać wszystkie pliki tekstowe w katalogu i przenieść je do nowego katalogu. Po przeniesieniu plików nie istnieją już w oryginalnym katalogu.
using System;
using System.IO;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
string sourceDirectory = @"C:\current";
string archiveDirectory = @"C:\archive";
try
{
var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt");
foreach (string currentFile in txtFiles)
{
string fileName = currentFile.Substring(sourceDirectory.Length + 1);
Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName));
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
open System.IO
let sourceDirectory = @"C:\current"
let archiveDirectory = @"C:\archive"
try
let txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt")
for currentFile in txtFiles do
let fileName = currentFile.Substring(sourceDirectory.Length + 1)
Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
with e ->
printfn $"{e.Message}"
Imports System.IO
Module Module1
Sub Main()
Dim sourceDirectory As String = "C:\current"
Dim archiveDirectory As String = "C:\archive"
Try
Dim txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt")
For Each currentFile As String In txtFiles
Dim fileName = currentFile.Substring(sourceDirectory.Length + 1)
Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
Next
Catch e As Exception
Console.WriteLine(e.Message)
End Try
End Sub
End Module
Poniższy przykład wylicza pliki w określonym katalogu, które mają rozszerzenie ".txt", odczytuje każdy wiersz pliku i wyświetla wiersz, jeśli zawiera ciąg "Europa".
using System;
using System.Linq;
using System.IO;
class Program
{
static void Main(string[] args)
{
try
{
// LINQ query for all .txt files containing the word 'Europe'.
var files = from file in Directory.EnumerateFiles(@"\\archives1\library\", "*.txt")
where file.ToLower().Contains("europe")
select file;
foreach (var file in files)
{
Console.WriteLine("{0}", file);
}
Console.WriteLine("{0} files found.", files.Count<string>().ToString());
}
catch (UnauthorizedAccessException UAEx)
{
Console.WriteLine(UAEx.Message);
}
catch (PathTooLongException PathEx)
{
Console.WriteLine(PathEx.Message);
}
}
}
open System
open System.IO
try
// All .txt files containing the word 'Europe'.
let files =
Directory.EnumerateFiles(@"\\archives1\library\", "*.txt")
|> Seq.filter(fun file -> file.ToLower().Contains "europe")
for file in files do
printfn $"{file}"
printfn $"{Seq.length files} files found."
with
| :? UnauthorizedAccessException as uaEx ->
printfn $"{uaEx.Message}"
| :? PathTooLongException as pathEx ->
printfn $"{pathEx.Message}"
Imports System.IO
Imports System.Linq
Module Module1
Sub Main()
Try
' LINQ query for all .txt files containing the word 'Europe'.
Dim files = From file In Directory.EnumerateFiles("\\archives1\library\", "*.txt")
Where file.ToLower().Contains("europe")
For Each file In files
Console.WriteLine("{0}", file)
Next
Console.WriteLine("{0} files found.", files.Count.ToString())
Catch UAEx As UnauthorizedAccessException
Console.WriteLine(UAEx.Message)
Catch PathEx As PathTooLongException
Console.WriteLine(PathEx.Message)
End Try
End Sub
End Module
Uwagi
searchPattern
może być kombinacją literałów i symboli wieloznacznych, ale nie obsługuje wyrażeń regularnych. Następujące specyfikatory symboli wieloznacznych są dozwolone w pliku searchPattern
.
Specyfikator symboli wieloznacznych | Jest zgodny z |
---|---|
* (gwiazdka) | Zero lub więcej znaków w tej pozycji. |
? (znak zapytania) | Dokładnie jeden znak w tej pozycji. |
Znaki inne niż symbol wieloznaczny to znaki literału. Na przykład searchPattern
ciąg "*t" wyszukuje wszystkie nazwy path
kończące się literą "t". Ciąg searchPattern
"s*" wyszukuje wszystkie nazwy path
na początku litery "s".
Uwaga
.NET Framework tylko: w przypadku używania symbolu wieloznakowego gwiazdki i searchPattern
określenia rozszerzenia pliku trzyznaczne, na przykład "*.txt", ta metoda zwraca również pliki z rozszerzeniami rozpoczynającymi się od określonego rozszerzenia. Na przykład wzorzec wyszukiwania "*.xls" zwraca zarówno "book.xls" jak i "book.xlsx". To zachowanie występuje tylko wtedy, gdy gwiazdka jest używana we wzorcu wyszukiwania, a podane rozszerzenie pliku ma dokładnie trzy znaki. Jeśli używasz znaku wieloznakowego znaku zapytania gdzieś w wzorcu wyszukiwania, ta metoda zwraca tylko pliki zgodne z określonym rozszerzeniem pliku dokładnie. W poniższej tabeli przedstawiono tę anomalię w .NET Framework.
Pliki w katalogu | Wzorzec wyszukiwania | Zwracany jest program .NET 5+ | .NET Framework zwraca |
---|---|---|---|
file.ai, file.aif | *.Ai | file.ai | file.ai |
book.xls, book.xlsx | *.xls | book.xls | book.xls, book.xlsx |
ello.txt, hello.txt, hello.txtt | ?ello.txt | hello.txt | hello.txt |
searchPattern
program nie może kończyć się dwoma kropkami ("..") ani zawierać dwóch kropek (".."), po których następuje DirectorySeparatorChar znak lub AltDirectorySeparatorChar, ani nie może zawierać żadnych nieprawidłowych znaków. Zapytania dotyczące nieprawidłowych znaków można wykonać przy użyciu GetInvalidPathChars metody .
Możesz określić informacje o ścieżce względnej za pomocą parametru path
. Informacje o ścieżce względnej są interpretowane jako względem bieżącego katalogu roboczego, który można określić przy użyciu GetCurrentDirectory metody .
Metody EnumerateFiles i GetFiles różnią się w następujący sposób: w przypadku użycia metody EnumerateFilesmożna rozpocząć wyliczanie kolekcji nazw przed zwróceniem całej kolekcji. W przypadku użycia metody GetFilesnależy poczekać na zwrócenie całej tablicy nazw, zanim będzie można uzyskać dostęp do tablicy. W związku z tym podczas pracy z wieloma plikami i katalogami EnumerateFiles może być wydajniejszy.
Zwrócona kolekcja nie jest buforowana. Każde wywołanie metody GetEnumerator w kolekcji rozpoczyna nowe wyliczenie.