#c_sharp
Как вызвать метод List? public static void SearchAllFiles() { Listfiles = 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));
Ответы
Ответ 1
Для начала сделаем метод для поиска файлов по маске. Работает с .NET 4.0 и быстрее, чем Directory.GetFiles: public static IEnumerablenGetFiles(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\ будет только один из этих файлов, который будет копироваться последним (он и перезатрёт существующий, и скопированный первым в целевую папку файл). Если же нужно скопировать файлы из папки с сохранением структуры вложенных папок и файлов, то вот тут уже давал ответ. Ответ 2
Создаете массив с расширениями, в цикле пробегаетесь по нему и ищите файлы с нужным расширением, дальше пробегаетесь в цикле по всем найденным файлам одного расширения и копируете по одному в нужную директорию, в моем случае копирование из D:\files в D:\files\copied public static void SearchAllFiles() { string path = @"D:\files\"; // откуда string pathTo = @"D:\files\copied\"; // куда string[] extensions = { "*.jpg", "*.txt", "*.asp" }; foreach (string ext in extensions) { foreach (string file in Directory.GetFiles(path, ext, SearchOption.AllDirectories)) { File.Copy(path + Path.GetFileName(file), pathTo + Path.GetFileName(file)); } } }
Комментариев нет:
Отправить комментарий