Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
tagboy
0 / 0 / 0
Регистрация: 04.01.2015
Сообщений: 30
#1

Поиск файлов по расширению - C++

09.07.2015, 10:10. Просмотров 784. Ответов 7
Метки нет (Все метки)

Надо написать консольное приложение, где входными данными были бы путь к каталогу и расширения файлов, которых мы ищем. Внутри каталога могут быть вложенные папки, чтоб программа и во вложенных папках искала файлы. Чтоб найдя данные файлы, программа выводила их полные пути в виде списка.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2015, 10:10     Поиск файлов по расширению
Посмотрите здесь:

Поиск файлов по расширению по всем дискам - C++
Друзья помогите пожалуйста !!! На с# нашел программу которая ищет файлы по расширению по всему ПК Ни как не могу понять как перевести...

Как организовать поиск файлов по расширению? - C++
У меня есть директория, в которой файлы с расширением *.txt! И мне надо что бы программа сама их нашла все... Помогите! Я не знаю как такое...

Запуск приложения по расширению - C++
Добрый вечер Подскажите пожалуйста Необходимо написать программу, в которой при выборе расширения будет открываться соответствующее...

Открыть файл по расширению C++/C - C++
Добрый день. Решил написать простенькую программу на Си/Си++, которая в конкретной папке на диске изменяет одну строчку во ВСЕХ файлах с...

Поиск файлов С++ - C++
Помогите плиз поправить код!!! Т.е чтоб прога выводила все текстовики в данном каталоге!!! #include<iostream> #include <windows.h> ...

Поиск файлов - C++
Вот решил перейти к изучению C++ после Delphi, интерисует как найти все файлы в папке :) Готовый код или ссылки, буду рад всему :)

Поиск файлов - C++
Помогите хотя бы в теории понять, возможен ли поиск файлов без использования функций библиотеки windows.h вообще, и как его можно...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Геомеханик
548 / 355 / 266
Регистрация: 26.06.2015
Сообщений: 806
09.07.2015, 16:26     Поиск файлов по расширению #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include <iostream>
#include <list>
#include <string>
#include <set>
#include <io.h>
typedef std::list<std::string> flist;
typedef std::set<std::string>  fset;
 
void  tokenize(const char* s, fset* exts);
char* copy_ext(char* d, int n, const char* s);
bool  is_ctrl_dir(const char* s);
 
 
//поиск файлов с указанными расширениями включая под-папки
bool get_files(const char* folder, const fset* exts, flist* lst){
    char        ext[32];
    std::string ps;
    _finddata_t inf;
 
    bool slash = true;
    ps = folder;
    if((ps.length() > 0) && (ps[ps.length() - 1] != '\\')){
        slash = false;
        ps   += '\\';
    }
    ps.append("*.*");
 
    long fp = _findfirst(ps.c_str(), &inf);
    if(fp == -1)
        return false;
 
    do {
 
        if(inf.attrib & _A_SUBDIR){ //искать в под-папках
 
            if(is_ctrl_dir(inf.name)){
                ps = folder;
                if(! slash)
                    ps += '\\';
                ps.append(inf.name);
                get_files(ps.c_str(), exts, lst);
            }
        } else {
 
            copy_ext(ext, sizeof(ext)-1, inf.name);
 
            if(exts->find(ext) != exts->end()){
                lst->push_back(folder);
                if(! slash)
                    lst->back() += '\\';
                lst->back().append(inf.name);
            }
        }
 
    } while(_findnext(fp, &inf) != -1);
 
    _findclose(fp);
    return true;
}
 
 
 
int main(void){
    //пример заданий расширений через точку запятой
    char ebuf[64] = "txt;pdf;doc;png;";
 
    //ввод расширений
    std::cout << "Enter exts: ";
    std::cin.getline(ebuf, sizeof(ebuf)-1);
 
    fset exts;
    tokenize(ebuf, &exts);
 
    //ввод пути 
    char path[255];
    std::cout << "Enter path: ";
    std::cin.getline(path, sizeof(path)-1);
    std::cin.sync();
 
    flist fs;
    get_files(path, &exts, &fs);
 
    //всего найденого файлов
    std::cout << "\tcount find files: "
              << fs.size() << std::endl;
 
    //вывести список найденных файлов
    flist::const_iterator i = fs.begin();
    while(i != fs.end()){
        std::cout << *i << std::endl;
        ++i;
    }
 
    fs.clear();
    exts.clear();
    std::cin.get();
    return 0;
}
 
//отделение расширений, пример: "txt;pdf;doc;png;"
void tokenize(const char* s, fset* exts){
    const char* p;
    while(*s){
        p = s;
        while(*p && (*p != ';'))
            ++p;
 
        if((p - s) > 0)
            exts->insert(std::string(s, p));
 
        if(*p == ';')
            ++p;
        s = p;
    }
}
 
//копируем расширение у имени файла
char* copy_ext(char* d, int n, const char* s){
    char* t = d;
    while(*s)
        ++s;
 
    s -= 1;
    while((s != t) && (*s != '.'))
        --s;
 
    if(*s == '.'){
        ++s;
        while(*s)
            *d++ = *s++;
    }
    *d = '\0';
    return t;
}
 
bool is_ctrl_dir(const char* s){
    int i = 0, j = 0;
    while(*s){
        if(*s == '.')
            ++i;
        ++s;
        ++j;
    }
    return (i != j);
}
tagboy
0 / 0 / 0
Регистрация: 04.01.2015
Сообщений: 30
09.07.2015, 22:11  [ТС]     Поиск файлов по расширению #3
Огромное спасибо за код!!! Один вопрос(начиная с 87 строки), к сожалению я еще не знаком с элементами типа(класса) flist и хотелось бы узнать, как из переменной fs типа flist скопировать значение адресов файлов в любую переменную типа char. Например, char buf[255]; srtcpy(buf, fs.значение каждого адреса файла) в цикле
MicM
821 / 488 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
10.07.2015, 10:37     Поиск файлов по расширению #4
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
#include <iostream>
#include <string>
#include <boost/filesystem.hpp>
#include <boost/regex.hpp>
 
using std::string;
using std::cout;
using std::getline;
using std::cin;
namespace fs = boost::filesystem;
 
bool is_correct_extension (string extension)
{
    boost::regex regx ("^\\.[a-zA-Z]+$");
    return boost::regex_match (extension, regx);
}
 
int main()
{
    string path;
    cout << "Enter path: ";
    getline (cin, path);
    fs::path my_path (path);
    if (fs::exists (my_path) && fs::is_directory (my_path))
    {
        string extension;
        cout << "Enter extension in format \".extension\": ";
        getline (cin, extension);
        if (is_correct_extension (extension))
        {
            for (fs::recursive_directory_iterator i (path), end; i!=end; i++)
            {
                if (!fs::is_directory (i->path()) && i->path().extension() == extension)
                {
                    cout << i->path() << "\n";
                }
            }
        }
        else
            cout << "Extension is not correctly\n";
    }
    else
        cout << "Wrong path\n";
}
nyancat1
0 / 0 / 0
Регистрация: 30.08.2016
Сообщений: 1
30.08.2016, 22:53     Поиск файлов по расширению #5
@MicM

Здравствуйте, дорогие, новичок в этом, но очень впечатлен вашим кодом. Как сделать эту функцию, которая будет возвращать полный путь найденного файла? Кроме того, мне нужно добавить больше чем один фильтр для расширения, .mp3, .txt, и т.д., и он должен пропустить папку окна, которые мы можем определить, окна, и т.д. system32

ты говоришь по английски ? моя мать из России, но я вырос в Нью-Йорке
С уважением
hoggy
6369 / 2587 / 452
Регистрация: 15.11.2014
Сообщений: 5,722
Завершенные тесты: 1
30.08.2016, 23:00     Поиск файлов по расширению #6
nyancat1,
http://en.cppreference.com/w/cpp/experimental/fs
http://en.cppreference.com/w/cpp/regex
bornvita
16 / 0 / 1
Регистрация: 30.08.2016
Сообщений: 21
31.08.2016, 16:16     Поиск файлов по расширению #7
I need too -

@MicM

Здравствуйте, дорогие, новичок в этом, но очень впечатлен вашим кодом. Как сделать эту функцию, которая будет возвращать полный путь найденного файла? Кроме того, мне нужно добавить больше чем один фильтр для расширения, .mp3, .txt, и т.д., и он должен пропустить папку окна, которые мы можем определить, окна, и т.д. system32

ты говоришь по английски ? моя мать из России, но я вырос в Нью-Йорке
С уважением

Добавлено через 11 часов 15 минут
@MicM Пожалуйста, напишите измененный код я также нужен очень срочно и будет кредитовать ваш форум ссылку на профиль в коде кредитов. С уважением

Добавлено через 55 секунд
@MicM Пожалуйста, напишите измененный код я также нужен очень срочно и будет кредитовать ваш форум ссылку на профиль в коде кредитов. С уважением.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2017, 23:19     Поиск файлов по расширению
Еще ссылки по теме:

Узнать тип файла по его расширению - C++
Здравствуйте, собственно вот что требуется: имея полный путь к файлу и его расширение узнать тип файла, например для .mp3/.flac/.m4a и...

Поиск файлов в директории - C++
Интересно, как можно реализовать вывод всех файлов, которые есть в данной директории? Например, одного формата? Ибо сейчас, при...

Поиск файлов в директории - C++
Добрый день. Что прошу: Есть exe, при запуске он должен найти все папки в этой директории и скопировать себя в них. С помощью чего...

Поиск тестовых файлов - C++
Возник такой вопрос: можно ли написать программу, которая будет искать в папке текстовые файлы и выводить их названия на экран. Если можно,...

Поиск всех файлов - C++
Здравствуйте Задача кода найти все файлы в папке,для их дальнейшего использования Код такой: #define _WIN32_WINNT 0x0400 ...


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

Или воспользуйтесь поиском по форуму:
Павел21061988
0 / 0 / 0
Регистрация: 24.03.2016
Сообщений: 1
05.03.2017, 23:19     Поиск файлов по расширению #8
Уважаемые форумчане, доброго всем времени суток. Такой вопрос (возможно, такая тема уже где-то обсуждалась, просто я не нашел): Есть приложение для поиска файлов, состряпанное "по кусочкам", найденным на просторах Интернета(в том числе и здесь где-то находил), написанное на Dev C++ (Версия 4.9.9.2). И нужно из консольного окна этого приложения каким-то образом "достать" список файлов, найденных этим же приложением, в текстовый файл(формат не принципиален).Т.е. список должен в идеале перебрасываться в текстовик из консоли автоматом. Такое вообще реально? Ломаю голову 2й день...
Yandex
Объявления
05.03.2017, 23:19     Поиск файлов по расширению
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru