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

не могу разобраться, с програмкой

19.01.2010, 08:46. Показов 1404. Ответов 1
Метки нет (Все метки)

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
63
64
65
66
67
68
69
70
71
72
73
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
 
//функция поиска
bool seek(LPCTSTR lpszFileName, BOOL bInnerFolders)
{
LPTSTR part;
char tmp[MAX_PATH]; // temporary array
char name[MAX_PATH];
 
HANDLE hSearch = NULL;
WIN32_FIND_DATA wfd;
memset(&wfd, 0, sizeof(WIN32_FIND_DATA));
 
//search in embeded folders for first
if(bInnerFolders)
{
if(GetFullPathName(lpszFileName, MAX_PATH, tmp, &part) == 0)
return FALSE;
lstrcpy(name, part);
lstrcpy(part, "*.*");
 
//if folder exists, down to it
wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
if (!((hSearch = FindFirstFile(tmp, &wfd)) == INVALID_HANDLE_VALUE))
do
{
//if current folder is a service folders? which no need to check
if (!strncmp(wfd.cFileName, ".", 1) || !strncmp(wfd.cFileName, "..", 2))
continue;
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //if it's a folder
{
// making a new path
char next[MAX_PATH];
if(GetFullPathName(lpszFileName, MAX_PATH, next, &part) == 0) return FALSE;
lstrcpy(part, wfd.cFileName);
lstrcat(next, "\\");
cout << next << endl;
lstrcat(next, name);
//recourse down
seek(next, TRUE);
}
}
while (FindNextFile(hSearch, &wfd)); //finding next file in folder
FindClose (hSearch); // closing a search descriptor
}
if ((hSearch = FindFirstFile(lpszFileName, &wfd)) == INVALID_HANDLE_VALUE)
return TRUE;
do
if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) // is it's a file
{
char file[MAX_PATH];
if(GetFullPathName(lpszFileName, MAX_PATH, file, &part) == 0) return FALSE;
lstrcpy(part, wfd.cFileName);
 
//adding its to a result list
cout << file << endl;
}
while (FindNextFile(hSearch, &wfd)); // next file in folder
FindClose (hSearch); // close search descriptor
 
return TRUE;
}
//главная функция
int main()
{
 
if(!seek("c:\\*.txt", false))
cout << "Searching failed" << endl;
return 0;
}
Добавлено через 9 часов 25 минут
Помогли исправить ошибки, новый вопрос как сделать чтобы имена найденных файлов выводились на экран и консоль в начале работы могла спросить, где искать и что искать.

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
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <fstream>
using namespace std;
 
//функция поиска
bool file_seek ( LPCTSTR lpszFileName, BOOL bInnerFolders, std::ofstream &file_out )
{ 
 
    LPTSTR part;
    char tmp[MAX_PATH]; // temporary array
    char name[MAX_PATH];
 
    HANDLE hSearch = NULL;
    WIN32_FIND_DATA wfd;
    memset ( &wfd, 0, sizeof(WIN32_FIND_DATA) );
 
    //search in embeded folders for first
    if(bInnerFolders)
    {
        if(GetFullPathName(lpszFileName, MAX_PATH, tmp, &part) == 0)
        return FALSE;
 
        lstrcpy(name, part);
        lstrcpy(part, "*.*");
 
        //if folder exists, down to it
        wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
        if (!((hSearch = FindFirstFile(tmp, &wfd)) == INVALID_HANDLE_VALUE))
        do
        {
            //if current folder is a service folders? which no need to check
            if (!strncmp(wfd.cFileName, ".", 1) || !strncmp(wfd.cFileName, "..", 2))
            continue;
 
            if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //if it's a folder
            {
                // making a new path
                char next[MAX_PATH];
                if(GetFullPathName(lpszFileName, MAX_PATH, next, &part) == 0)
                return FALSE;
                lstrcpy(part, wfd.cFileName);
                lstrcat(next, "\\");
                //cout << next << endl; 
                lstrcat(next, name );
                //recourse down
                file_seek(next, TRUE, file_out);
            }
        }
        while (FindNextFile(hSearch, &wfd)); //finding next file in folder
        //---------------------------------------------------------------------
        FindClose (hSearch); // closing a search descriptor
    }
 
    if ((hSearch = FindFirstFile(lpszFileName, &wfd)) == INVALID_HANDLE_VALUE)
    return TRUE;
 
    do
    if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) // is it's a file
  Новая папк  {
        char file[MAX_PATH];
        if(GetFullPathName(lpszFileName, MAX_PATH, file, &part) == 0)
        return FALSE;
 
        lstrcpy(part, wfd.cFileName);
 
        //adding its to a result list
        //cout << file << endl;
    //******************************************
    file_out << file << std::endl;
    //******************************************
    }
    while (FindNextFile(hSearch, &wfd)); // next file in folder
    FindClose (hSearch); // close search descriptor
 
return TRUE;
}
//главная функция
int main()//================================================================
{
    std::ofstream file_out ( "out.txt" );
 
    if(!file_seek("c:\Новая папка\*.doc", true, file_out ))
        cout << "Searching failed" << endl;
    else
        cout << "The search returned a positive result" << endl;
 
    file_out.close();
 
system ( "pause" );;
return 0;
}//=========================================================================
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.01.2010, 08:46
Ответы с готовыми решениями:

Не могу написать комментарии для функции поиска, не могу разобраться...
void __fastcall TForm1::FindDialog1Find(TObject *Sender) { int found, start, end; //...

не могу разобраться
Написать функции заполнения одномерного масива на N элементов: a) с клавиатуры b) натуральными...

не могу разобраться..
Вывести на экран все натуральные числа из диапазона от A до B, в записи которых цифра 7 встречается...

Не могу разобраться с If
if (k1&gt;=0) tgf2=k1 else { if (k2&gt;=0) tgf2=k2 else Labelp-&gt;Caption=&quot;Невозможно&quot;;...

1
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
19.01.2010, 21:56 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
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <fstream>
using namespace std;
 
 
bool file_seek ( LPCTSTR lpszFileName, BOOL bInnerFolders, std::ofstream &file_out )
{ 
 
    LPTSTR part;
    char tmp[MAX_PATH]; // temporary array
    char name[MAX_PATH];
 
    HANDLE hSearch = NULL;
    WIN32_FIND_DATA wfd;
    memset ( &wfd, 0, sizeof(WIN32_FIND_DATA) );
 
    //search in embeded folders for first
    if(bInnerFolders)
    {
        if(GetFullPathName(lpszFileName, MAX_PATH, tmp, &part) == 0)
        return FALSE;
 
 
 
 
        lstrcpy(name, part);
        lstrcpy(part, "*.*");
 
        //if folder exists, down to it
        wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
        if (!((hSearch = FindFirstFile(tmp, &wfd)) == INVALID_HANDLE_VALUE))
        do
        {
            //if current folder is a service folders? which no need to check
            if (!strncmp(wfd.cFileName, ".", 1) || !strncmp(wfd.cFileName, "..", 2))
            continue;
 
            if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //if it's a folder
            {
                // making a new path
                char next[MAX_PATH];
                if(GetFullPathName(lpszFileName, MAX_PATH, next, &part) == 0)
                return FALSE;
                lstrcpy(part, wfd.cFileName);
                lstrcat(next, "\\");
                //cout << next << endl; 
                lstrcat(next, name );
                //recourse down
                file_seek(next, TRUE, file_out);
            }
        }
        while (FindNextFile(hSearch, &wfd)); //finding next file in folder
        //---------------------------------------------------------------------
        FindClose (hSearch); // closing a search descriptor
    }
 
    if ((hSearch = FindFirstFile(lpszFileName, &wfd)) == INVALID_HANDLE_VALUE)
    return TRUE;
 
    do
    if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) // is it's a file
    {
        char file[MAX_PATH];
        if(GetFullPathName(lpszFileName, MAX_PATH, file, &part) == 0)
        return FALSE;
 
        lstrcpy(part, wfd.cFileName);
 
        //adding its to a result list
        //cout << file << endl;
    //******************************************
    file_out << file << std::endl;
    printf("%s%s",file,"\n");
    //******************************************
    }
    while (FindNextFile(hSearch, &wfd)); // next file in folder
    FindClose (hSearch); // close search descriptor
 
return TRUE;
}
 
int main()//================================================================
{
    std::ofstream file_out ( "out.txt" );
    char WhatToSearh[255];
    cout<<"VVedite dannie dlia poiska, naprimer c:\\Test\\*.txt\n";
    cin>> WhatToSearh;
 
    if(!file_seek(WhatToSearh, true, file_out ))
        cout << "Searching failed" << endl;
    else
        cout << "The search returned a positive result" << endl;
 
    file_out.close();
 
system ( "pause" );;
return 0;
}//=========================================================================
0
19.01.2010, 21:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.01.2010, 21:56
Помогаю со студенческими работами здесь

Не могу разобраться с С++
Всем Привет, так я кодеру в Делфи. Не давно нашел что мне нужно но оy написан на С. Вот и начался у...

Не могу разобраться со скинами
Помогите как вставлять скины (Альфаскин) в проект ошибку выдает и всё Пишу на Builder c++ 6

не могу разобраться с ошибками
работы с обыкновенными дробями. Класс должен содержать следующие элементы. Поля (скрытые): ...

Не могу разобраться с циклом
Добрый день! Помогите разобраться с циклом Graph_Painter. По идее, по нажатию кнопки считываются...


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

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

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