Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
2 / 2 / 0
Регистрация: 05.11.2016
Сообщений: 22
1

Как спарсить файлы из директории?

05.10.2018, 16:50. Показов 2404. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.
У меня задача скопировать два файла из определенной директории.

Имена файлов начинаются на qwer
А дальше идут цифры, причем длина имён файлов разная.

То есть
qwer5325346345763
qwer54364564578567567525

Я разделил эту задачу на три шага.

Спарсить все имена файлов в массив string (CString)
Найти, которые мне нужны (CString.Find(L"qwer"))
Скопировать.

У меня возникают проблемы на первом этапе.
Как спарсить файлы с папки?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.10.2018, 16:50
Ответы с готовыми решениями:

Вывести в консоль все файлы и директории, какие есть в текущей директории
вывести в консоль все файлы и директории какие есть в текущей директории. подскажите пожалуйста через какие функции это можно сделать?

Скрипт, который удаляет файлы из первой директории, если есть файлы с такими же именами во второй директории
Помоги, пожалуйста, написать скрипт, который удаляет файлы из первой директории, если есть файлы с такими же именами во второй директории. ...

Как посредством CMD сравнить все файлы в заданной директории и удалить файлы с одинаковым содержимым?
В папке "папка" находятся текстовые файлы 1.txt 2.txt 3.txt 4.txt, некоторые из этих файлов имеют абсолютно одинаковое содержимое. Как...

6
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
05.10.2018, 20:22 2
Лучший ответ Сообщение было отмечено XaKep0 как решение

Решение

Как-то так...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <windows.h>
 
int main()
{
    std::string dir = "C:\\Users\\111\\Desktop";
    std::string new_dir = "C:\\Users\\111\\Desktop\\qwer_files";
    
    std::string mask = dir + "\\qwer*.*";
    
    WIN32_FIND_DATA wfd;
    HANDLE hFindFile;
    if ((hFindFile = FindFirstFile(mask.c_str(), &wfd)) == INVALID_HANDLE_VALUE)
        std::cerr << "Directory '" << dir << "' does not exist\n";
    else
    {
        CreateDirectory(new_dir.c_str(), NULL);
        do {
            std::cout << wfd.cFileName << "\n";
            std::string from = dir + "\\" + wfd.cFileName;
            std::string to = new_dir + "\\" + wfd.cFileName;
            CopyFile(from.c_str(), to.c_str(), TRUE);
        }
        while (FindNextFile(hFindFile, &wfd));
    }
    std::cout << "Done\n";
    return 0;
}
1
2 / 2 / 0
Регистрация: 05.11.2016
Сообщений: 22
05.10.2018, 22:08  [ТС] 3
Во спасибо.
Я чуть-чуть изменил код, стриги на систринги поменял и методы другие использовал. Все работает.
А можете пожалуйста помочь с кодом для копирования папки?
Если метод для копирования папки?
Или нужно создать папку там, где надо и туда в цикле все файлы копировать. В папке все файлы надо скопировать.
0
Заблокирован
05.10.2018, 22:14 4
Для копирования директорий функций нет. Вручную по файлу копировать. Если надо всю папку со вложенными папками, то копировать рекурсивно так же вручную.

Добавлено через 1 минуту
Цитата Сообщение от XaKep0 Посмотреть сообщение
А можете пожалуйста помочь с кодом для копирования папки?
А с каким из шагов, которые ты расписал, ты сам справился?
0
2 / 2 / 0
Регистрация: 05.11.2016
Сообщений: 22
05.10.2018, 22:23  [ТС] 5
Цитата Сообщение от курочка_таатши Посмотреть сообщение
Для копирования директорий функций нет. Вручную по файлу копировать. Если надо всю папку со вложенными папками, то копировать рекурсивно так же вручную.
Спасибо.
Цитата Сообщение от курочка_таатши Посмотреть сообщение
А с каким из шагов, которые ты расписал, ты сам справился?
А я и не говорил, что я справился с каким-то.
0
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
06.10.2018, 01:20 6
Лучший ответ Сообщение было отмечено XaKep0 как решение

Решение

XaKep0, в какой среде программируете?

Добавлено через 17 минут
Вот как копируются директории. Тут используется стандарт C++17.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <exception>
#include <experimental/filesystem>
 
int main()
{
    try
    {
        std::experimental::filesystem::path from = "C:\\Users\\111\\Desktop\\qwer_files";
        std::experimental::filesystem::path to = "C:\\Users\\111\\Desktop\\qwer_files2";
        std::experimental::filesystem::copy(from, to, std::experimental::filesystem::copy_options::recursive);
    }
    catch (std::exception& e)
    {
        std::cout << e.what();
    }
    std::cin.get();
    return 0;
}
Добавлено через 10 минут
Прошу прощения. Я сделал ошибку во втором посте. Забыл закрыть хендл. Вот исправленный вариант.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <windows.h>
 
int main()
{
    std::string dir = "C:\\Users\\111\\Desktop";
    std::string new_dir = "C:\\Users\\111\\Desktop\\qwer_files";
    
    std::string mask = dir + "\\qwer*.*";
    
    WIN32_FIND_DATA wfd;
    HANDLE hFindFile;
    if ((hFindFile = FindFirstFile(mask.c_str(), &wfd)) == INVALID_HANDLE_VALUE)
        std::cerr << "Directory '" << dir << "' does not exist\n";
    else
    {
        CreateDirectory(new_dir.c_str(), NULL);
        do {
            std::cout << wfd.cFileName << "\n";
            std::string from = dir + "\\" + wfd.cFileName;
            std::string to = new_dir + "\\" + wfd.cFileName;
            CopyFile(from.c_str(), to.c_str(), TRUE);
        }
        while (FindNextFile(hFindFile, &wfd));
        FindClose(hFindFile);
    }
    std::cout << "Done\n";
    return 0;
}
Добавлено через 8 минут
Вот Вам ещё вариант копирования директории, с использованием winapi + рекурсии
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <windows.h>
 
bool CopyDirectory(const std::string &from, const std::string &to)
{
    std::string source, destination;
    
    if (!CreateDirectory(to.c_str(), 0))
        false;
 
    std::string mask = from + "\\*.*";
    WIN32_FIND_DATA wfd;
 
    HANDLE hFindFile = FindFirstFile(mask.c_str(), &wfd);
    if (hFindFile != INVALID_HANDLE_VALUE)
    {
        do
        {
            if (wfd.cFileName[0] != '.')
            {
                source.erase();
                destination.erase();
 
                source = from + "\\" + wfd.cFileName;
                destination = to + "\\" + wfd.cFileName;
 
                if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                {
                    if (CopyDirectory(source, destination))
                        return true;
                }
                else
                {
                    if (!CopyFile(source.c_str(), destination.c_str(), TRUE))
                        return false;
                }
            }
        }
        while (FindNextFile(hFindFile, &wfd));
        FindClose(hFindFile);
    }
    return true;
}
 
int main()
{
    std::string from = "C:\\Users\\111\\Desktop\\qwer_files";
    std::string to = "C:\\Users\\111\\Desktop\\qwer_files2";
 
    if (CopyDirectory(from, to))
        std::cout << "Done\n";
    else
        std::cerr << "Error\n";
    std::cin.get();
    return 0;
}
1
2 / 2 / 0
Регистрация: 05.11.2016
Сообщений: 22
12.10.2018, 12:57  [ТС] 7
VS 2015
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.10.2018, 12:57
Помогаю со студенческими работами здесь

Как спарсить файлы с сайта?
Есть сайты с файлами. Прошу привести простой пример кода. Не такой, когда надо обойти весь сайт и скачать все файлы по ссылкам, а для...

Как собрать файлы в директории?
Привет всем! Пользователем в программе задаётся директория (начальная папка). Требуется собрать все звуковые файлы (формат mp3, wav) как...

Как отличить PE-файлы в директории от остальных
Есть директория, например, c:/windows/system32. В ней имеется большое количество файлов (over 2000). Как в ней найти все PE-файлы? Суть...

Как использовать файлы из предыдущей директории
Вот обычная ситуация, есть папка с сайтом, в ней файл index.html и css для landing page и много других папок для других страниц сайта, как...

Перебрать файлы в директории. Как реализовать?
Народ, помогите пожалуйста! Хочу организовать цикл по файлам ( все из одной директории!) для создания сводного отчета в Excel. Отчет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Winforstrap или красявый дизайн своими руками на HTML+JS+Winform­s
anomal6 04.03.2025
Сидел тут вечером ковырял проект на MAUI, и как же глупо создаются пакеты MSIX и система обновлений пакета публикации, но не об этом. Бывает нужен современный дизайн программы а писать на MAUI,. . .
Формат данных для симуляции физики, посредством распространённы­­­­­­­х не обученных моделей.
Hrethgir 04.03.2025
Что-то как-то снова потерялось, зато катангенсы закатангесились в одном сообщении. На днях писал, что планирую для работы апгрейдить (на этот раз удачно) девайс для работы (конкретно - здоровья для,. . .
Концепция variadic
CoderHuligan 04.03.2025
Мне не очень нравится (а кому это нравится?) что у нас есть отдельно компилятор, отдельно линковщик, причем со своим собственным командным языком. При этом усложнении надо знать помимо языка. . .
Java Record или Kotlin Data Class: что лучше для неизменяемых данных
Wired 04.03.2025
Java Record и Kotlin Data Class — два мощных инструмента для обуздания неизменяемых структур данных, каждый со своим уникальным подходом к решению этой задачи. История их появления весьма. . .
Создание производительны­­­х API с Java и gRPC
Wired 04.03.2025
В мире микросервисной разработки вопрос производительности часто становится краеугольным камнем. И хотя REST API давно завоевал сердца разработчиков своей простотой и интуитивностью, при высоких. . .
Что нового в JDK 24
Wired 04.03.2025
JDK 24 — это настоящий прорыв в эволюции Java, который кардинально меняет правила игры. В этом релизе разработчики Oracle наконец-то довели до ума множество критически важных улучшений в. . .
Разработка блокчейн с использованием Java: смарт-контракты и dApp
Wired 04.03.2025
Погружаясь в мир блокчейн-разработки на Java, разработчик получает доступ к внушительному арсеналу инструментов. В отличие от Solidity, который "заперт" в экосистеме Ethereum, Java предоставляет. . .
WebAssembly в Kubernetes
stackOverflow 03.03.2025
В современной экосистеме облачных технологий WebAssembly (Wasm) становится все более значимым компонентом, предлагая уникальный подход к выполнению кода в распределенных системах. Эта технология. . .
GitHub Actions или Jenkins: Выбираем CI/CD платформу
stackOverflow 03.03.2025
Непрерывная интеграция и развертывание (CI/ CD) изменили подход к разработке программного обеспечения, превратив его в бесшовный процесс от написания кода до развертывания в продакшн. GitHub Actions и. . .
Автоматизация тестирования Pull Request в Kubernetes: Интеграция с GitHub Actions и GKE
stackOverflow 03.03.2025
Масштабные проекты с использованием Kubernetes требуют надежной системы тестирования изменений перед их внедрением в продакшн-среду. Традиционный подход с ручной проверкой Pull Request не справляется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru