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

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

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

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

Имена файлов начинаются на 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
Лучший ответ Сообщение было отмечено 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  [ТС]
Во спасибо.
Я чуть-чуть изменил код, стриги на систринги поменял и методы другие использовал. Все работает.
А можете пожалуйста помочь с кодом для копирования папки?
Если метод для копирования папки?
Или нужно создать папку там, где надо и туда в цикле все файлы копировать. В папке все файлы надо скопировать.
0
Заблокирован
05.10.2018, 22:14
Для копирования директорий функций нет. Вручную по файлу копировать. Если надо всю папку со вложенными папками, то копировать рекурсивно так же вручную.

Добавлено через 1 минуту
Цитата Сообщение от XaKep0 Посмотреть сообщение
А можете пожалуйста помочь с кодом для копирования папки?
А с каким из шагов, которые ты расписал, ты сам справился?
0
2 / 2 / 0
Регистрация: 05.11.2016
Сообщений: 22
05.10.2018, 22:23  [ТС]
Цитата Сообщение от курочка_таатши Посмотреть сообщение
Для копирования директорий функций нет. Вручную по файлу копировать. Если надо всю папку со вложенными папками, то копировать рекурсивно так же вручную.
Спасибо.
Цитата Сообщение от курочка_таатши Посмотреть сообщение
А с каким из шагов, которые ты расписал, ты сам справился?
А я и не говорил, что я справился с каким-то.
0
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
06.10.2018, 01:20
Лучший ответ Сообщение было отмечено 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  [ТС]
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
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru