0 / 0 / 0
Регистрация: 29.12.2017
Сообщений: 1
1

Рекурсивный поиск заданного файла по всей системе

07.01.2018, 17:27. Показов 431. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
доброго времени суток, есть вот такой код, который выводит корневые каталоги диска С, нужно осуществить поиск по каждому из каталогов рекурсивно. Пользователь введёт имя файла и программа должна пройтись по всем папкам и подпапкам в поисках файла и в итоге вывести путь к этому файлу.

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
#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS 
 
#include <Windows.h>
#include <iostream>
#include <conio.h>
 
using namespace std;
 
void FindDir(HANDLE search_handle, WIN32_FIND_DATA file, WCHAR *name);
 
int main()
{
    WIN32_FIND_DATA file;
    HANDLE search_handle = FindFirstFile(L"C:\\*", &file);
    WCHAR *name = new WCHAR[100];
 
    cout << "Enter Filename, please : ";
    wcin >> name; 
 
    cout <<  endl;
    cout << endl;
    cout << endl;
 
 
    FindDir(search_handle, file,name);
    _getch();
}
 
 
 
void FindDir(HANDLE search_handle, WIN32_FIND_DATA file, WCHAR *name)
{
    WCHAR *DirName = new WCHAR[10];
    if (search_handle)
    {
        FindNextFile(search_handle, &file);
        
        if (file.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
        {
            DirName = file.cFileName;
            FindDir(search_handle, file, name);
        }
        else if (file.cFileName == name)
        {
            cout << name << endl;
        }
 
        do
        {
            DirName = file.cFileName;
            wcout << DirName << endl;
            
        } while (FindNextFile(search_handle, &file));
 
        FindClose(search_handle);
 
    }
 
 
    
}
Добавлено через 1 час 39 минут
Немного код поменялся с того момента, выведет все папки, найдёт файл в корневой директории, но если файл в какой-то из поддиректорий, то уже "обзывается".

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
#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS 
 
#include <Windows.h>
#include <iostream>
#include <conio.h>
 
using namespace std;
 
bool cmp(WCHAR *DirName, WCHAR* name);
void FindDir(HANDLE search_handle, WIN32_FIND_DATA file, WCHAR *name, WCHAR *DirName);
 
int main()
{
    WIN32_FIND_DATA file;
    WCHAR *DirName = new WCHAR[100];
    WCHAR *name = new WCHAR[100];
 
    cout << "Input directory: ";
    wcin >> DirName;
    cout << endl;
 
 
    HANDLE search_handle = FindFirstFile(DirName, &file);
 
    cout << "Enter Filename, please : ";
    wcin >> name; 
 
    cout <<  endl;
    cout << endl;
    cout << endl;
 
 
    FindDir(search_handle, file,name, DirName);
    _getch();
}
 
 
 
void FindDir(HANDLE search_handle, WIN32_FIND_DATA file, WCHAR *name, WCHAR *DirName)
{
    bool P = FALSE;
    WCHAR *AllDir = new WCHAR[100];
    
    if (search_handle)
    {
        //FindNextFile(search_handle, &file);
        
        do
        {
            DirName = file.cFileName;
            wcout << DirName << endl;
 
            P = cmp(DirName, name);
 
            if (P)
            {
                cout << "    FOUNDED!!" << endl;
                
            }
 
            else if (file.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY)
            {
                cout << "    Not a dir.." << endl;
                continue;
            }
            else if (file.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
            {
                cout << "    It is a dir..." << endl;
                //FindDir(search_handle, file, name,DirName);
            }
            
        } while (FindNextFile(search_handle, &file));
 
        FindClose(search_handle);
 
    }
 
}
 
bool cmp(WCHAR *DirName, WCHAR* name)
{
    for (int i = 0; DirName[i] != 0 && name[i] != 0; i++)
    {
        if (DirName[i] != name[i])
            return false;
    }
    return true;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.01.2018, 17:27
Ответы с готовыми решениями:

FindFirstFile и FindNextFile рекурсивный поиск файла
Как безопасно (без всевозможных переполнений и высвобождением ресурсов) реализовать рекурсивный...

Поиск папки по всей системе и определенного файла в ней
Здравствуйте, стоит задача найти в системе папку, имя которой известно, например: &quot;test&quot;. Она может...

Поиск заданного значения по всей БД
Всем привет) Нужно получить названия таблиц, в которых содержится год, например 2008. То есть...

Рекурсивный поиск заданного элемента в массиве
X - массив, состоящий из 100 числовых элементов. Написать программу, которая выдает номер первого...

0
07.01.2018, 17:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.01.2018, 17:27
Помогаю со студенческими работами здесь

Рекурсивный поиск файла. Падаю
используя различные примеры из интернета, написал функцию, которая ищет файл и возвращает путь к...

Поиск конкретного файла на всей машине
было бы еще неплохо искать и по маске!!! и видеть результаты поиска:)

Рекурсивный поиск файла с определенным расширением
Всем доброго времени суток.Рекурсивно перебираю все каталоги и выбираю файлы.Нужны файлы с...

Реализовать поиск заданного файла в древе каталогов и поиск указанной информации в этом файле
Имеется много папок в каждой папке есть файл proc.txt, как можно по всем этим папкам пройтись и из...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru