Сегодня я покажу, как просто работать со всеми файлами на c#, находящимися в некоторой директории (папке) и всех вложенных папках. Для получения имен файлов некоторой директории используется статический метод Directory.GetFiles.
Выборка всех файлов в директории осуществляется простым вызовом метода Directory.GetFiles()
string[] fullfilesPath =
Directory.GetFiles(@"d:\MyProject\MyFiles\");
Данный массив будет содержать строковые значения всех найденных файлов. К примеру, если в данной директории имеется три файла price.doc, photo.jpg, data.rar, то наш массив будет содержать записи:
fullfilesPath[0] – "d:\MyProject\MyFiles\price.doc";
fullfilesPath[1] – "d:\MyProject\MyFiles\photo.jpg";
fullfilesPath[2] – "d:\MyProject\MyFiles\data.rar";
Выборка всех файлов конкретного типа из директории
string[] fullfilesPath =
Directory.GetFiles(@"d:\MyProject\MyFiles\", "*.doc");
Данный массив будет содержать строковые значения всех найденных файлов. В данном примере fullfilesPath содержит всего одну запись
fullfilesPath[0] – "d:\MyProject\MyFiles\price.doc";
Выборка всех файлов по части имени из директории осуществляется второй перегрузкой метода Directory.GetFiles()
string[] fullfilesPath =
Directory.GetFiles(@"d:\MyProject\MyFiles\", "p*");
Соответственно результаты будут следующими:
fullfilesPath[0] – "d:\MyProject\MyFiles\price.doc";
fullfilesPath[1] – "d:\MyProject\MyFiles\photo.jpg";
Если мы точно знаем несколько символов в имени требуемого файла,
то можем более точно указать критерий поиска, например "pr*".
В этом случае мы получим только файл price.doc. Кстати, мы можем,
конечно, и не знать не только полное имя файла, но и его тип.
Соответственно, в строке критерия можно задавать что-то типа "pr*.do*".
В этом случае, мы найдем все файлы, имена которых начинаются с "pr" и их тип начинается с "do".
Еще примером может быть критерий поиска "p*o.j*g".
Под этот запрос попадет файл photo.jpg.
Выборка всех файлов директории, включая поддиректории.
Если нам необходимо просмотреть все поддиректории, то в методе Directory.GetFiles()
следует указать третий параметр SearchOption – перечисление, которое может принимать два значения
AllDirectories/TopDirectoryOnly.
Из названий уже само собой понятно какой параметр следует выбрать для поиска в поддиректориях.
string[]fullfilesPath =
Directory.GetFiles(@"d:\MyProject\MyFiles\", "*.*",
SearchOption.AllDirectories);
Удаление ненужных файлов директории. После получения имен необходимых
файлов мы можем их удалить следующим способом:
Array.ForEach(fullfilesPath,
delegate(string currentPath)
{
File.Delete(currentPath);
}
);
Если с анонимными методами вы еще не знакомы, то знайте, что анонимные методы –
это обычные методы, вызов которых может осуществлять только делегат, непосредственно
определяющий данный метод. Нигде больше в коде данный метод вызвать нельзя хотя бы потому,
что данный метод не имеет имени. Это обстоятельство привносит в архитектуру приложения
дополнительную безопасность. Но и без делегатов вполне возможно работать с данным методом:
foreach (string fileName in fullfilesPath)
File.Delete(fileName);