Страницы

Поиск по вопросам

суббота, 27 апреля 2019 г.

Перебор файлов и копирование в определенную папку

Как вызвать метод List?
public static void SearchAllFiles() { List files = new List(); String[] extensions = new String[] { "*.jpg", "*.txt", "*.asp" };
foreach (String extension in extensions) { String[] files = Directory.GetFiles(path, found, SearchOption.AllDirectories);
foreach (String file in files) files.Add(file); } }
И не могу сообразить в каком месте вставить копирование файлов:
File.Copy(path, path + Path.GetFileName(path));


Ответ

Для начала сделаем метод для поиска файлов по маске. Работает с .NET 4.0 и быстрее, чем Directory.GetFiles
public static IEnumerable nGetFiles(string path, string searchPatternExpression = "", SearchOption searchOption = SearchOption.AllDirectories) { Regex reSearchPattern = new Regex(searchPatternExpression); return Directory.EnumerateFiles(path, "*", searchOption).Where(file => reSearchPattern.IsMatch(Path.GetFileName(file))); }
Теперь так:
public static void SearchAllFiles() { //Искомые расширения: string LookForExt = "\.jpg|\.txt|\.asp"; //Пути папок источника и приёмника: string SourcePath = @"D:\SourceDir\"; string TargetPath = @"D:\TargetPath\"; //Получаем файлы и копируем их: IEnumerable files = nGetFiles(SourcePath, LookForExt); foreach (f in files) //Можно было и так: foreach (f in nGetFiles(@"D:\SourceDir", LookForExt)) { try { File.Copy(f, TargetPath + Path.GetFileName(f), true); } catch (Exception e) { throw e; } } }
В результате будут просканированы все файлы в папке SourcePath и ее подпапках, найденные файлы, соответствующие искомым расширениям будут скопированы в TargetPath без сохранения структуры подпапок. Более того, если есть файл D:\SourceDir\test.asp и есть файл D:\SourceDir\111\test.asp, то в результирующей папке D:\TargetPath\ будет только один из этих файлов, который будет копироваться последним (он и перезатрёт существующий, и скопированный первым в целевую папку файл).
Если же нужно скопировать файлы из папки с сохранением структуры вложенных папок и файлов, то вот тут уже давал ответ

Комментариев нет:

Отправить комментарий