Класс Directory

Use the T:System.IO.Directory class for typical operations such as copying, moving, renaming, creating, and deleting directories.

    To create a directory, use one of the M:System.IO.Directory.CreateDirectory(System.String) methods.

    To delete a directory, use one of the M:System.IO.Directory.Delete(System.String) methods.

    To get or set the current directory for an app, use the M:System.IO.Directory.GetCurrentDirectory or M:System.IO.Directory.SetCurrentDirectory(System.String) method.

    To manipulate T:System.DateTime information related to the creation, access, and writing of a directory, use methods such as M:System.IO.Directory.SetLastAccessTime(System.String,System.DateTime) and M:System.IO.Directory.SetCreationTime(System.String,System.DateTime).

The static methods of the T:System.IO.Directory class perform security check s on all methods. If you are going to reuse an object several times, consider using the corresponding instance method of T:System.IO.DirectoryInfo instead, because the security check will not always be necessary.

If you are performing only one directory-related action, it might be more efficient to use a static T:System.IO.Directory method rather than a corresponding T:System.IO.DirectoryInfo instance method. Most T:System.IO.Directory methods require the path to the directory that you are manipulating.

Примечание

In members that accept a string path parameter, that path must be well-formed or an exception is raised. For example, if a path is fully qualified but begins with a space (" c:\temp"), the path string isn"t trimmed, so the path is considered malformed and an exception is raised. In addition, a path or a combination of paths cannot be fully qualified twice. For example, "c:\temp c:\windows" also raises an exception. Ensure that your paths are well-formed when using methods that accept a path string. For more information see T:System.IO.Path.

In members that accept a path, the path can refer to a file or a directory. You can use a full path, a relative path, or a Universal Naming Convention (UNC) path for a server and share name. For example, all the following are acceptable paths:

    "c:\\MyDir" in C#, or "c:\MyDir" in Visual Basic.

    "MyDir\\MySubdir" in C#, or "MyDir\MySubDir" in Visual Basic.

    "\\\\MyServer\\MyShare" in C#, or "\\MyServer\MyShare" in Visual Basic.

By default, full read/write access to new directories is granted to all users. However, the app must have the correct security to access existing directories.

To demand permissions for a directory and all its subdirectories, end the path string with the directory separator character. (For example, "C:\Temp\" grants access to C:\Temp\ and all its subdirectories.) To demand permissions only for a specific directory, end the path string with a period. (For example, "C:\Temp\." grants access only to C:\Temp\, not to its subdirectories.)

In members that accept a searchPattern parameter, the search string can be any combination of literal characters and two wildcard characters; * and ?. This parameter does not recognize regular expressions. For more information, see the M:System.IO.Directory.EnumerateDirectories(System.String,System.String) method or any other method that uses the searchPattern parameter.

For a list of common I/O tasks, see Common I/O Tasks.

В общем чтобы найти в директории (папке) нужный файл достаточно написать команду.

//подключать библиотеку для работы с файловой системой using System.IO;

C# функция поиска файлов в директории

/*функция поиска файлов в директории передаваемой в параметр patch по его имени или маске передаваемой в параметре pattern */ static string SearchFile(string patch, string pattern) { /*флаг SearchOption.AllDirectories означает искать во всех вложенных папках*/ string ReultSearch = Directory.GetFiles(patch, pattern, SearchOption.AllDirectories); //возвращаем список найденных файлов соответствующих условию поиска return ReultSearch; }

Если допустим попробовать найти таким способом картинки в профиле пользователя. Для этого можно написать следующие команды в функции Main.

C# запускаем поиск файлов

static void Main() { //ищем в нем все файлы с расширением *.png int C = SearchFile(PatchProfile, "*.png" ).Length; MessageBox.Show("найдено " + C + " файлов png" ); }


В итоге функция может сработать в 2 вариантах либо найти нам все необходимые значения

Но если вдруг мы наткнемся на какой либо каталок в котором не можем прочитать информацию например у нас в него нет доступа. То функция просто вылетит в ошибку и ничего нам не вернет.


Тут любой знаток может сказать что можно вставить скобки проверки ошибок try{} catch{} и возможно будет по своему прав если нам не нужны результаты. А вот если они нам все таки нужны то лучше подойти к поиску немного с другой стороны. А именно по шагам сначала найти все директории в которых будет происходить поиск файлов а далее для каждой из них запустить поиск файлов. Таким образом если все таки где либо произойдет ошибка чтения остальные результаты поиска у нас будут доступны и мы хоть что то да найдем.


Для поиска вложенный папок напишем следующую функцию

C# функция нахождения директорий по указанному пути

/*функция нахождения директорий по указанному пути*/ static string SearchDirectory(string patch) { //находим все папки в по указанному пути string ReultSearch = Directory.GetDirectories(patch); //возвращаем список директорий return ReultSearch; }


Так как мы читаем только список имен и не пробуем в зайти в папки то ОС Windows это дело пропустит не выдаст нам ошибку если нет доступа. Проверим опишем код получения количества папок в функции Main

С# узнаем количество папок

static void Main() { //получаем переменную Windows с адресом текущего пользователя string PatchProfile = Environment.GetEnvironmentVariable("USERPROFILE" ); //ищем все вложенные папки int C = SearchDirectory(PatchProfile).Length; //выводим сообщение о том сколько файлов нашли MessageBox.Show("найдено " + C + " директорий " ); }

После запуска нам выведется окно с цифрой найденных папок по указанному пути.

Отлично но как это нам поможет в поисках файлов. Очень просто мы по сути взяли наш путь к директории (папке) и расширили его 25 путей вложенных папок (директорий).

Для того чтобы было понятно выведем эти 25 имен на экран для этого изменим функцию Main

C# вывод текста в MessageBox в несколько строк

static void Main() { //получаем переменную Windows с адресом текущего пользователя string PatchProfile = Environment.GetEnvironmentVariable("USERPROFILE" ); //ищем все вложенные папки string S = SearchDirectory(PatchProfile); //создаем строку в которой соберем все пути string ListPatch="найденные папки \n" ; //заголовок для строк foreach (string folderPatch in S) { //добавляем новую строку в список ListPatch += folderPatch + "\n" ; } //выводим список на экран MessageBox.Show(ListPatch); }


После запуска мы увидим список папок найденных в указанной директории


Далее нам останется описать функцию которая зайдет в каждую из папок и найдет в ней нужные нам файлы. По сути можно описать вызов функции в цикле foreach (string folderPatch in S) но вместо того чтобы собирать список из директорий собрать список из файлов. Итак изменим функцию Main для поиска файлов и сбора их в список.

Классы Directory и DirectoryInfo

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

Create(), CreateSubdirectorу()

Создает каталог (или набор подкаталогов) по заданному путевому имени

Delete()

Удаляет каталог и все его содержимое

GetDirectories()

Возвращает массив объектов DirectoryInfo, представляющих все подкаталоги в текущем каталоге

GetFiles()

Извлекает массив объектов FileInfo, представляющий множество файлов в заданном каталоге

MoveTo()

Перемещает каталог со всем содержимым по новому пути

Parent

Извлекает родительский каталог данного каталога

Root

Получает корневую часть пути

Работа с типом DirectoryInfo начинается с указания определенного пути в качестве параметра конструктора. Если требуется получить доступ к текущему рабочему каталогу (т.е. каталогу выполняющегося приложения), применяйте нотацию ".". Вот некоторые примеры:

// Привязаться к текущему рабочему каталогу DirectoryInfo dir1 = new DirectoryInfo("."); // Привязаться к C:\Windows DirectoryInfo dir2 = new DirectoryInfo(@"C:\Windows");

Во втором примере делается предположение, что переданный в конструктор путь (C:\Windows) физически существует на машине. При попытке взаимодействовать с несуществующим каталогом будет сгенерировано исключение System.IO.DirectoryNotFoundException . Таким образом, чтобы указать каталог, который пока еще не создан, сначала придется вызвать метод Create():

// Привязаться к несуществующему каталогу, затем создать его DirectoryInfo dir3 = new DirectoryInfo(@"C:\MyCode\Testing"); dir3.Create();

После создания объекта DirectoryInfo можно исследовать его содержимое, используя любое свойство, унаследованное от FileSystemInfo. Например:

Using System; using System.IO; namespace ConsoleApplication15_DirectoryInfo { class Program { static void Main() { ShowWindowsDirectoryInfo(); } // Выводим информацию о каталоге static void ShowWindowsDirectoryInfo() { DirectoryInfo dir = new DirectoryInfo(@"C:\Windows"); Console.WriteLine("***** Информация о каталоге *****\n"); Console.WriteLine("Полный путь: {0}\nНазвание папки: {1}\nРодительский каталог: {2}\n" + "Время создания: {3}\nАтрибуты: {4}\nКорневой каталог: {5}", dir.FullName,dir.Name,dir.Parent,dir.CreationTime,dir.Attributes,dir.Root); Console.ReadLine(); } } }

В дополнение к получению базовых деталей о существующем каталоге можно расширить текущий пример использованием некоторых методов типа DirectoryInfo. Для начала применим метод GetFiles() для получения информации обо всех файлах *.jpg, расположенных в каталоге C:\Windows\Web\Wallpaper. Если на вашей машине нет каталога C:\Windows\Web\Wallpaper, измените код для чтения файлов из какого-то существующего каталога (например, прочитайте все файлы *.bmp из каталога C:\Windows).

Метод GetFiles() возвращает массив объектов типа FileInfo, каждый из которых представляет детальную информацию о конкретном файле. Предположим, что следующий статический метод класса Program вызывается в методе Main():

Static void ImageDisplayFiles() { DirectoryInfo dir = new DirectoryInfo("C:\\Windows\\Web\\Wallpaper"); // Получить все файлы с расширением.jpg FileInfo imageFiles = dir.GetFiles("*.jpg",SearchOption.AllDirectories); // Сколько файлов найдено Console.WriteLine("Найдено {0} картинок",imageFiles.Length); // Вывести информацию о каждом файле foreach (FileInfo f in imageFiles) { Console.WriteLine("\n******************\n"); Console.WriteLine("Имя файла: "+f.Name); Console.WriteLine("Размер файла: "+f.Length); Console.WriteLine("Время создания файла: " + f.CreationTime); } Console.ReadLine(); }


Обратите внимание на указание в вызове GetFiles() опции поиска; SearchOption.AllDirectories обеспечивает просмотр всех подкаталогов корня. После запуска этого приложения получается список файлов, отвечающих критерию поиска.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: