Directory.GetFiles Метод

Определение

Возвращает имена файлов, соответствующих указанным критериям.

Перегрузки

GetFiles(String)

Возвращает имена файлов (с указанием пути к ним) в указанном каталоге.

GetFiles(String, String)

Возвращает имена файлов (включая пути) из указанного каталога, отвечающие условиям заданного шаблона поиска.

GetFiles(String, String, EnumerationOptions)

Возвращает имена файлов (включая пути) в указанном каталоге, соответствующих заданному шаблону поиска и параметрам перечисления.

GetFiles(String, String, SearchOption)

Возвращает имена файлов (включая пути) в заданном каталоге, отвечающие условиям шаблона поиска, используя значение, которое определяет, выполнять ли поиск в подкаталогах.

GetFiles(String)

Возвращает имена файлов (с указанием пути к ним) в указанном каталоге.

public:
 static cli::array <System::String ^> ^ GetFiles(System::String ^ path);
public static string[] GetFiles (string path);
static member GetFiles : string -> string[]
Public Shared Function GetFiles (path As String) As String()

Параметры

path
String

Относительный или абсолютный путь к каталогу для поиска. В этой строке не учитывается регистр знаков.

Возвращаемое значение

String[]

Массив полных имен (включая пути) файлов в указанном каталоге или пустой массив, если файлы не найдены.

Исключения

path — это имя файла.

-или- Произошла сетевая ошибка.

У вызывающего объекта отсутствует необходимое разрешение.

платформа .NET Framework и .NET Версии Core старше 2.1: path строка нулевой длины, содержит только пробелы или содержит один или несколько недопустимых символов. Вы можете запросить недопустимые символы с помощью метода GetInvalidPathChars().

path имеет значение null.

Указанный путь, имя файла или оба значения превышают максимальную длину, заданную в системе.

Указанный путь не найден или является недопустимым (например, ведет на несопоставленный диск).

Примеры

В следующем примере показано, как использовать GetFiles метод для возврата имен файлов из указанного пользователем расположения. Этот пример настроен для перехвата всех ошибок, распространенных для этого метода.

// For Directory::GetFiles and Directory::GetDirectories
// For File::Exists, Directory::Exists
using namespace System;
using namespace System::IO;
using namespace System::Collections;

// Insert logic for processing found files here.
void ProcessFile( String^ path )
{
   Console::WriteLine( "Processed file '{0}'.", path );
}


// Process all files in the directory passed in, recurse on any directories 
// that are found, and process the files they contain.
void ProcessDirectory( String^ targetDirectory )
{
   
   // Process the list of files found in the directory.
   array<String^>^fileEntries = Directory::GetFiles( targetDirectory );
   IEnumerator^ files = fileEntries->GetEnumerator();
   while ( files->MoveNext() )
   {
      String^ fileName = safe_cast<String^>(files->Current);
      ProcessFile( fileName );
   }

   
   // Recurse into subdirectories of this directory.
   array<String^>^subdirectoryEntries = Directory::GetDirectories( targetDirectory );
   IEnumerator^ dirs = subdirectoryEntries->GetEnumerator();
   while ( dirs->MoveNext() )
   {
      String^ subdirectory = safe_cast<String^>(dirs->Current);
      ProcessDirectory( subdirectory );
   }
}

int main( int argc, char *argv[] )
{
   for ( int i = 1; i < argc; i++ )
   {
      String^ path = gcnew String(argv[ i ]);
      if ( File::Exists( path ) )
      {
         
         // This path is a file
         ProcessFile( path );
      }
      else
      if ( Directory::Exists( path ) )
      {
         
         // This path is a directory
         ProcessDirectory( path );
      }
      else
      {
         Console::WriteLine( "{0} is not a valid file or directory.", path );
      }

   }
}
// For Directory.GetFiles and Directory.GetDirectories
// For File.Exists, Directory.Exists
using System;
using System.IO;
using System.Collections;

public class RecursiveFileProcessor
{
    public static void Main(string[] args)
    {
        foreach(string path in args)
        {
            if(File.Exists(path))
            {
                // This path is a file
                ProcessFile(path);
            }
            else if(Directory.Exists(path))
            {
                // This path is a directory
                ProcessDirectory(path);
            }
            else
            {
                Console.WriteLine("{0} is not a valid file or directory.", path);
            }
        }
    }

    // Process all files in the directory passed in, recurse on any directories
    // that are found, and process the files they contain.
    public static void ProcessDirectory(string targetDirectory)
    {
        // Process the list of files found in the directory.
        string [] fileEntries = Directory.GetFiles(targetDirectory);
        foreach(string fileName in fileEntries)
            ProcessFile(fileName);

        // Recurse into subdirectories of this directory.
        string [] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
        foreach(string subdirectory in subdirectoryEntries)
            ProcessDirectory(subdirectory);
    }

    // Insert logic for processing found files here.
    public static void ProcessFile(string path)
    {
        Console.WriteLine("Processed file '{0}'.", path);	
    }
}
module RecursiveFileProcessor

open System.IO

// Insert logic for processing found files here.
let processFile path =
    printfn $"Processed file '%s{path}'."

// Process all files in the directory passed in, recurse on any directories
// that are found, and process the files they contain.
let rec processDirectory targetDirectory =
    // Process the list of files found in the directory.
    let fileEntries = Directory.GetFiles targetDirectory
    for fileName in fileEntries do
        processFile fileName

    // Recurse into subdirectories of this directory.
    let subdirectoryEntries = Directory.GetDirectories targetDirectory
    for subdirectory in subdirectoryEntries do
        processDirectory subdirectory

[<EntryPoint>]
let main args =
    for path in args do
        if File.Exists path then
            // This path is a file
            processFile path
        elif Directory.Exists path then
            // This path is a directory
            processDirectory path
        else
            printfn $"{path} is not a valid file or directory."
    0
' For Directory.GetFiles and Directory.GetDirectories
' For File.Exists, Directory.Exists 

Imports System.IO
Imports System.Collections

Public Class RecursiveFileProcessor

    Public Overloads Shared Sub Main(ByVal args() As String)
        Dim path As String
        For Each path In args
            If File.Exists(path) Then
                ' This path is a file.
                ProcessFile(path)
            Else
                If Directory.Exists(path) Then
                    ' This path is a directory.
                    ProcessDirectory(path)
                Else
                    Console.WriteLine("{0} is not a valid file or directory.", path)
                End If
            End If
        Next path
    End Sub


    ' Process all files in the directory passed in, recurse on any directories 
    ' that are found, and process the files they contain.
    Public Shared Sub ProcessDirectory(ByVal targetDirectory As String)
        Dim fileEntries As String() = Directory.GetFiles(targetDirectory)
        ' Process the list of files found in the directory.
        Dim fileName As String
        For Each fileName In fileEntries
            ProcessFile(fileName)

        Next fileName
        Dim subdirectoryEntries As String() = Directory.GetDirectories(targetDirectory)
        ' Recurse into subdirectories of this directory.
        Dim subdirectory As String
        For Each subdirectory In subdirectoryEntries
            ProcessDirectory(subdirectory)
        Next subdirectory

    End Sub

    ' Insert logic for processing found files here.
    Public Shared Sub ProcessFile(ByVal path As String)
        Console.WriteLine("Processed file '{0}'.", path)
    End Sub
End Class

Комментарии

Методы EnumerateFiles отличаются GetFiles следующим образом: при использовании EnumerateFilesможно начать перечисление коллекции имен до возвращения всей коллекции. При использовании GetFilesнеобходимо дождаться возврата всего массива имен, прежде чем получить доступ к массиву. Таким образом, при работе с большим количеством файлов и каталогов EnumerateFiles может быть более эффективным.

Возвращенные имена файлов добавляются к указанному path параметру.

Этот метод идентичен GetFiles(String, String) звездочку (*), указанной как шаблон поиска.

Параметр path может указывать относительные или абсолютные сведения о пути. Относительные сведения о пути интерпретируются относительно текущего рабочего каталога. Сведения о получении текущего рабочего каталога см. в разделе GetCurrentDirectory.

Порядок возвращенных имен файлов не гарантируется; используйте метод, Sort если требуется определенный порядок сортировки.

Параметр path не учитывает регистр.

Список распространенных задач ввода-вывода см. в разделе "Общие задачи ввода-вывода".

См. также раздел

Применяется к

GetFiles(String, String)

Возвращает имена файлов (включая пути) из указанного каталога, отвечающие условиям заданного шаблона поиска.

public:
 static cli::array <System::String ^> ^ GetFiles(System::String ^ path, System::String ^ searchPattern);
public static string[] GetFiles (string path, string searchPattern);
static member GetFiles : string * string -> string[]
Public Shared Function GetFiles (path As String, searchPattern As String) As String()

Параметры

path
String

Относительный или абсолютный путь к каталогу для поиска. В этой строке не учитывается регистр знаков.

searchPattern
String

Строка поиска, которая должна сравниваться с именами файлов в path. Этот параметр может содержать сочетание допустимого литерального пути и подстановочного символа (* и ?), но не поддерживает регулярные выражения.

Возвращаемое значение

String[]

Массив полных имен (включая пути) файлов в указанном каталоге, которые соответствуют указанному шаблону поиска, или пустой массив, если файлы не найдены.

Исключения

path — это имя файла.

-или- Произошла сетевая ошибка.

У вызывающего объекта отсутствует необходимое разрешение.

платформа .NET Framework и .NET Версии Core старше 2.1: path строка нулевой длины, содержит только пробелы или содержит один или несколько недопустимых символов. Вы можете запросить недопустимые символы с помощью GetInvalidPathChars().

-или- searchPattern не содержит допустимый шаблон.

Параметр path или searchPattern имеет значение null.

Указанный путь, имя файла или оба значения превышают максимальную длину, заданную в системе.

Указанный путь не найден или является недопустимым (например, ведет на несопоставленный диск).

Примеры

В следующем примере подсчитывается количество файлов, начинающихся с указанной буквы.

using namespace System;
using namespace System::IO;
int main()
{
   try
   {
      
      // Only get files that begin with the letter "c".
      array<String^>^dirs = Directory::GetFiles( "c:\\", "c*" );
      Console::WriteLine( "The number of files starting with c is {0}.", dirs->Length );
      Collections::IEnumerator^ myEnum = dirs->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         Console::WriteLine( myEnum->Current );
      }
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "The process failed: {0}", e );
   }

}
using System;
using System.IO;

class Test
{
    public static void Main()
    {
        try
        {
            // Only get files that begin with the letter "c".
            string[] dirs = Directory.GetFiles(@"c:\", "c*");
            Console.WriteLine("The number of files starting with c is {0}.", dirs.Length);
            foreach (string dir in dirs)
            {
                Console.WriteLine(dir);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("The process failed: {0}", e.ToString());
        }
    }
}
open System.IO

try
    // Only get files that begin with the letter "c".
    let dirs = Directory.GetFiles(@"c:\", "c*")
    printfn $"The number of files starting with c is {dirs.Length}."
    for dir in dirs do
        printfn $"{dir}"
with e ->
    printfn $"The process failed: {e}"
Imports System.IO

Public Class Test
    Public Shared Sub Main()
        Try
            ' Only get files that begin with the letter "c".
            Dim dirs As String() = Directory.GetFiles("c:\", "c*")
            Console.WriteLine("The number of files starting with c is {0}.", dirs.Length)
            Dim dir As String
            For Each dir In dirs
                Console.WriteLine(dir)
            Next
        Catch e As Exception
            Console.WriteLine("The process failed: {0}", e.ToString())
        End Try
    End Sub
End Class

Комментарии

Возвращенные имена файлов добавляются к указанному path параметру, а порядок возвращаемых имен файлов не гарантируется; используйте Sort метод, если требуется определенный порядок сортировки.

searchPattern может быть сочетанием литеральных и подстановочных знаков, но не поддерживает регулярные выражения. Следующие описатели подстановочных знаков разрешены в searchPattern.

Описатель подстановочных знаков Соответствует
* (звездочка) Ноль или более символов в этой позиции.
? (вопросительный знак) Ровно один символ в этой позиции.

Символы, отличные от подстановочного знака, являются литеральными символами. Например, searchPattern строка "*t" выполняет поиск всех имен в path конце буквы "t". Строка searchPattern "s*" выполняет поиск всех имен, path начиная с буквы "s".

searchPattern не может заканчиваться двумя точками ("..") или содержать два периода (".."), за которыми следует DirectorySeparatorChar или AltDirectorySeparatorCharне может содержать недопустимые символы. Вы можете запросить недопустимые символы с помощью метода GetInvalidPathChars.

Примечание

При использовании подстановочного знака звездочки в searchPattern таком виде, как "*.txt", количество символов в указанном расширении влияет на поиск следующим образом:

  • Если указанное расширение имеет ровно три символа, метод возвращает файлы с расширениями, начинающимися с указанного расширения. Например, "*.xls" возвращает как "book.xls", так и "book.xlsx".
  • Во всех остальных случаях метод возвращает файлы, которые точно соответствуют указанному расширению. Например, "*.ai" возвращает значение "file.ai", но не "file.aif".

При использовании подстановочного знака вопросительного знака этот метод возвращает только файлы, соответствующие указанному расширению файла. Например, при выполнении двух файлов "file1.txt" и "file1.txtother" в каталоге шаблон поиска "file?.txt" возвращается только первый файл, а шаблон поиска "file*.txt" возвращает оба файла.

Примечание

Так как этот метод проверяет имена файлов с форматом имени файла 8.3 и длинным форматом имени файла, шаблон поиска, аналогичный "*1*.txt", может возвращать непредвиденные имена файлов. Например, при использовании шаблона поиска "*1*.txt" возвращается значение "longfilename.txt", так как эквивалентным форматом имени файла 8.3 является "LONGFI~1.TXT".

Методы EnumerateFiles отличаются GetFiles следующим образом: при использовании EnumerateFilesможно начать перечисление коллекции имен до возвращения всей коллекции. При использовании GetFilesнеобходимо дождаться возврата всего массива имен, прежде чем получить доступ к массиву. Таким образом, при работе с большим количеством файлов и каталогов EnumerateFiles может быть более эффективным.

Параметр path может указывать относительные или абсолютные сведения о пути. Относительные сведения о пути интерпретируются относительно текущего рабочего каталога. Сведения о получении текущего рабочего каталога см. в разделе GetCurrentDirectory.

Параметр path не учитывает регистр.

Список распространенных задач ввода-вывода см. в разделе "Общие задачи ввода-вывода".

См. также раздел

Применяется к

GetFiles(String, String, EnumerationOptions)

Возвращает имена файлов (включая пути) в указанном каталоге, соответствующих заданному шаблону поиска и параметрам перечисления.

public:
 static cli::array <System::String ^> ^ GetFiles(System::String ^ path, System::String ^ searchPattern, System::IO::EnumerationOptions ^ enumerationOptions);
public static string[] GetFiles (string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);
static member GetFiles : string * string * System.IO.EnumerationOptions -> string[]
Public Shared Function GetFiles (path As String, searchPattern As String, enumerationOptions As EnumerationOptions) As String()

Параметры

path
String

Относительный или абсолютный путь к каталогу для поиска. В этой строке не учитывается регистр знаков.

searchPattern
String

Строка поиска, которая будет сравниваться с именами подкаталогов в path. Этот параметр может содержать сочетание допустимых литеральных и подстановочных символов, но не поддерживает регулярные выражения.

enumerationOptions
EnumerationOptions

Объект, описывающий конфигурацию поиска и перечисления для использования.

Возвращаемое значение

String[]

Массив полных имен (включая пути) файлов в указанном каталоге, которые соответствуют заданному шаблону поиска и параметрам перечисления, или пустой массив, если файлы не найдены.

Исключения

path — это имя файла.

-или- Произошла сетевая ошибка.

У вызывающего объекта отсутствует необходимое разрешение.

платформа .NET Framework и .NET Версии Core старше 2.1: path строка нулевой длины, содержит только пробелы или содержит один или несколько недопустимых символов. Вы можете запросить недопустимые символы с помощью GetInvalidPathChars().

-или- searchPattern не содержит допустимый шаблон.

Параметр path или searchPattern имеет значение null.

Указанный путь, имя файла или оба значения превышают максимальную длину, заданную в системе.

Указанный путь не найден или является недопустимым (например, ведет на несопоставленный диск).

Комментарии

Возвращенные имена файлов добавляются к указанному path параметру, а порядок возвращаемых имен файлов не гарантируется; используйте Sort метод, если требуется определенный порядок сортировки.

searchPattern может быть сочетанием литеральных и подстановочных знаков, но не поддерживает регулярные выражения. Следующие описатели подстановочных знаков разрешены в searchPattern.

Описатель подстановочных знаков Соответствует
* (звездочка) Ноль или более символов в этой позиции.
? (вопросительный знак) Ровно один символ в этой позиции.

Символы, отличные от подстановочного знака, являются литеральными символами. Например, searchPattern строка "*t" выполняет поиск всех имен в path конце буквы "t". Строка searchPattern "s*" выполняет поиск всех имен, path начиная с буквы "s".

searchPattern не может заканчиваться двумя точками ("..") или содержать два периода (".."), за которыми следует DirectorySeparatorChar или AltDirectorySeparatorCharне может содержать недопустимые символы. Вы можете запросить недопустимые символы с помощью метода GetInvalidPathChars.

Примечание

При использовании подстановочного знака звездочки в searchPattern таком виде, как "*.txt", количество символов в указанном расширении влияет на поиск следующим образом:

  • Если указанное расширение имеет ровно три символа, метод возвращает файлы с расширениями, начинающимися с указанного расширения. Например, "*.xls" возвращает значения "book.xls" и "book.xlsx".
  • Во всех остальных случаях метод возвращает файлы, которые точно соответствуют указанному расширению. Например, "*.ai" возвращает "file.ai", но не "file.aif".

При использовании подстановочного знака вопросительного знака этот метод возвращает только файлы, соответствующие указанному расширению файла. Например, при выполнении двух файлов "file1.txt" и "file1.txtother" в каталоге шаблон поиска "file?.txt" возвращается только первый файл, а шаблон поиска "file*.txt" возвращает оба файла.

Примечание

Так как этот метод проверяет имена файлов как с форматом 8.3, так и с длинным именем файла, шаблон поиска, похожий на "*1*.txt", может возвращать непредвиденные имена файлов. Например, при использовании шаблона поиска "*1*.txt" возвращается "longfilename.txt", так как эквивалентным форматом имени файла 8.3 является "LONGFI~1.TXT".

Методы EnumerateFiles отличаются GetFiles следующим образом: при использовании EnumerateFilesможно начать перечисление коллекции имен перед возвратом всей коллекции. При использовании GetFilesнеобходимо дождаться возврата всего массива имен, прежде чем получить доступ к массиву. Таким образом, при работе с большим количеством файлов и каталогов EnumerateFiles может быть более эффективным.

Параметр path может указывать относительные или абсолютные сведения о пути. Относительные сведения о пути интерпретируются как относительные к текущему рабочему каталогу. Сведения о получении текущего рабочего каталога см. в разделе GetCurrentDirectory.

Параметр path не учитывает регистр.

Список распространенных задач ввода-вывода см. в разделе "Общие задачи ввода-вывода".

Применяется к

GetFiles(String, String, SearchOption)

Возвращает имена файлов (включая пути) в заданном каталоге, отвечающие условиям шаблона поиска, используя значение, которое определяет, выполнять ли поиск в подкаталогах.

public:
 static cli::array <System::String ^> ^ GetFiles(System::String ^ path, System::String ^ searchPattern, System::IO::SearchOption searchOption);
public static string[] GetFiles (string path, string searchPattern, System.IO.SearchOption searchOption);
static member GetFiles : string * string * System.IO.SearchOption -> string[]
Public Shared Function GetFiles (path As String, searchPattern As String, searchOption As SearchOption) As String()

Параметры

path
String

Относительный или абсолютный путь к каталогу для поиска. В этой строке не учитывается регистр знаков.

searchPattern
String

Строка поиска, которая должна сравниваться с именами файлов в path. Этот параметр может содержать сочетание допустимого литерального пути и подстановочного символа (* и ?), но не поддерживает регулярные выражения.

searchOption
SearchOption

Одно из значений перечисления, определяющее, следует ли выполнять поиск только в текущем каталоге или также во всех его подкаталогах.

Возвращаемое значение

String[]

Массив полных имен (включая пути) файлов в указанном каталоге, которые соответствуют указанному шаблону и параметру поиска, или пустой массив, если файлы не найдены.

Исключения

платформа .NET Framework и .NET Версии Core старше 2.1: path строка нулевой длины, содержит только пробелы или содержит один или несколько недопустимых символов. Вы можете запросить недопустимые символы с помощью метода GetInvalidPathChars().

-или- searchPattern не содержит допустимый шаблон.

Параметр path или searchpattern имеет значение null.

searchOption не является допустимым значением SearchOption.

У вызывающего объекта отсутствует необходимое разрешение.

Указанный путь не найден или является недопустимым (например, ведет на несопоставленный диск).

Указанный путь, имя файла или оба значения превышают максимальную длину, заданную в системе.

path — это имя файла.

-или- Произошла сетевая ошибка.

Комментарии

Возвращенные имена файлов добавляются к указанному параметру path , а порядок возвращаемых имен файлов не гарантируется; используйте Sort метод, если требуется определенный порядок сортировки.

searchPattern может быть сочетанием литеральных и подстановочных знаков, но не поддерживает регулярные выражения. Следующие описатели подстановочных знаков разрешены в searchPattern.

Описатель подстановочных знаков Соответствует
* (звездочка) Ноль или более символов в этой позиции.
? (вопросительный знак) Ровно один символ в этой позиции.

Символы, отличные от подстановочного знака, являются литеральными символами. Например, searchPattern строка "*t" ищет все имена в path конце буквы "t". Строка searchPattern "s*" ищет все имена, path начиная с буквы "s".

searchPattern не может заканчиваться двумя точками ("..") или содержать две точки (".."), за которыми DirectorySeparatorChar AltDirectorySeparatorCharследует или не может содержать недопустимые символы. Вы можете запросить недопустимые символы с помощью метода GetInvalidPathChars.

Примечание

При использовании подстановочного знака звездочки в searchPattern таком виде, как "*.txt", количество символов в указанном расширении влияет на поиск следующим образом:

  • Если указанное расширение имеет ровно три символа, метод возвращает файлы с расширениями, начинающимися с указанного расширения. Например, "*.xls" возвращает значения "book.xls" и "book.xlsx".
  • Во всех остальных случаях метод возвращает файлы, которые точно соответствуют указанному расширению. Например, "*.ai" возвращает "file.ai", но не "file.aif".

При использовании подстановочного знака вопросительного знака этот метод возвращает только файлы, соответствующие указанному расширению файла. Например, при двух файлах "file1.txt" и "file1.txtother" в каталоге шаблон поиска "file?.txt" возвращает только первый файл, а шаблон поиска "file*.txt" возвращает оба файла.

Примечание

Так как этот метод проверяет имена файлов как с форматом 8.3, так и с длинным именем файла, шаблон поиска, похожий на "*1*.txt", может возвращать непредвиденные имена файлов. Например, при использовании шаблона поиска "*1*.txt" возвращается "longfilename.txt", так как эквивалентным форматом имени файла 8.3 является "LONGFI~1.TXT".

Методы EnumerateFiles отличаются GetFiles следующим образом: при использовании EnumerateFilesможно начать перечисление коллекции имен перед возвратом всей коллекции. При использовании GetFilesнеобходимо дождаться возврата всего массива имен, прежде чем получить доступ к массиву. Таким образом, при работе с большим количеством файлов и каталогов EnumerateFiles может быть более эффективным.

Имена файлов включают полный путь.

Параметр path может указывать относительные или абсолютные сведения о пути. Относительные сведения о пути интерпретируются как относительные к текущему рабочему каталогу. Сведения о получении текущего рабочего каталога см. в разделе GetCurrentDirectory.

Параметр path не учитывает регистр.

Список распространенных задач ввода-вывода см. в разделе "Общие задачи ввода-вывода".

См. также раздел

Применяется к