Страницы

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

воскресенье, 16 февраля 2020 г.

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

#c_sharp


Как вызвать метод 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));

    


Ответы

Ответ 1



Для начала сделаем метод для поиска файлов по маске. Работает с .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\ будет только один из этих файлов, который будет копироваться последним (он и перезатрёт существующий, и скопированный первым в целевую папку файл). Если же нужно скопировать файлы из папки с сохранением структуры вложенных папок и файлов, то вот тут уже давал ответ.

Ответ 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)); } } }

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

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