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

поиск файлов по строкам - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сортировка вставками в односвязном списке http://www.cyberforum.ru/cpp-beginners/thread354066.html
Собственно нужно реализовать такую сортировку, но что-то не могу я придумать как её реализовать именно в односвязном списке, у нас ведь доступ не прямой как у массива здесь ... есть варианты? Собственно код моего односвязного списка (большим количеством места отделены функции которые вряд-ли понадобятся для сортировки, я их просто оставил для целостности, main в коде тоже оставлен с той же...
C++ Как поставить условие Есть переменные: x1, x2, y1, y2. И нужно сделать следующее: Прибавить к x1 единицу (++x1) в том случае если выполняется одно из условий: 1) x1 не равен x2 и y1 не равен y2 2) x1 равен x2 или y1 равен y2 Я как то запутался. http://www.cyberforum.ru/cpp-beginners/thread354039.html
Найти произведение элементов вектора C++
Всем форумчанинам привет, прошу помощи решения задачи Задача: Найти произведение элементов вектора (массивы не использовать, значения перемножать по мере ввода).
Простая база данных с помощью массива C++
здравствуйте. Помогите пожалуйста, можете написать пример простейшей базы данных созданной с помощью массива. База состоит из 3-5 строк,в каждой из которых фио и год рождения.операции с базой данных :поиск (по году рождения),удаление записи и добавление в любое место записи. Всем кто сможет помочь,огромное спасибо заранее! ну язык С++ конечно:)
C++ Определить дату предыдущего дня http://www.cyberforum.ru/cpp-beginners/thread353980.html
Все доброго времени суток. Нужна помощь в решении задачи. Заранее огромное спасибо. Вот собственно и задача: "Дата некоторого дня определяется двумя натуральными числами: порядковым номером месяца и числом. Определить дату предыдущего дня."
C++ идеальное хеширование В лабораторной работе задание "реализовать идеальное хеширование". в методичке очень мало материала по хешированию и по данному вопросу в частности. Посоветуйте какую-нибудь литературу или статью по этой теме, где все объясняется с нуля. подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
20.09.2011, 17:24     поиск файлов по строкам
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Вобщем реализовываю задание - вбиваем каталог и выполняем в нём поиск первого файла удовлетворяющего маске
Вот Си код (SHL-диалог выбора файла не убирал, т.к достаёт вручную вбивать пути на своём компьютере, если есть желание его убрать - убираем, у меня этого желания нет)
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
146
147
148
149
150
151
152
153
154
155
156
157
#include <iostream.h>//i/o
#include <windows.h> //FindFirst(Next)File
#include <shlobj.h>  //Диалог выбора файла
#include <stdio.h>   //sprintf
//Руссификация
ostream& operator<<(ostream &stream,char* s){
    for(char* ps=s; *ps; ps++){
        if(*ps=='ё')
            stream<<char(241);
        else if(*ps=='Ё')
            stream<<char(240);
        else if(*ps>=-64 && *ps<=-17)           
            stream<<char(*ps+64+128);
        else if(*ps<0)
            stream<<char(*ps+64+176);
        else
            stream<<*ps;
    }
    return stream;
}
 
char * SelectFile(HWND hWnd);
bool   IsFile(LPCTSTR sPath);
bool   FindFile(LPCTSTR sPath, LPCTSTR sFind);
bool   IsStrEqualMask(LPCTSTR s, LPCTSTR sFind);
 
int main()
{
    char ch;
    char szFilePath[MAX_PATH];
    char szFindMask[MAX_PATH];
    HWND hWnd = GetForegroundWindow();//Находим дескриптор окна консоли
    do
    {
        if(!strcpy(szFilePath,SelectFile(hWnd)))
            cout<<"Файл не выбран";
        else
        {
            if(IsFile(szFilePath))
            {
                    cout<<"Выбран файл\r\n";
                    szFilePath[strlen(szFilePath) - strlen(strrchr(szFilePath,'\\')) + 1] = '\0'; 
            }
            cout<<"Каталог для поиска:\r\n["<<szFilePath<<"]\r\n";
            cout<<"Введите маску поиска\r\n";
            cin>>szFindMask;
            if(!FindFile(szFilePath, szFindMask))
                cout<<"Поиск не дал результатов\r\n";
        }
        cout<<"Y - Повторить поиск\r\n";
        cin>>ch;
    }
    while(ch == 'Y' || ch == 'y');
    return 0;
}
 
char * SelectFile(HWND hWnd)
{
    ShowWindow(hWnd,SW_HIDE);
    char sPath[MAX_PATH];sPath[0] = '\0';
    LPCITEMIDLIST lpItemDList;
    BROWSEINFO bi = {NULL, NULL, sPath,
       "Выберите файл или каталог",
        BIF_DONTGOBELOWDOMAIN|BIF_BROWSEINCLUDEFILES,
        NULL,
        NULL,
        0
    };
    if((lpItemDList = SHBrowseForFolder(&bi)))
    {
        if(SHGetPathFromIDList(lpItemDList, sPath))
            GetShortPathName((LPCTSTR)sPath,sPath,strlen(sPath));
    }
    ShowWindow(hWnd,SW_SHOW);
    return &sPath[0];
}
 
bool IsFile(LPCTSTR sPath)
{
    bool bFile = false;
    HANDLE hFile = CreateFile
        (
            sPath, 
            GENERIC_READ,
            FILE_SHARE_READ,
            NULL, 
            OPEN_EXISTING, 
            FILE_ATTRIBUTE_NORMAL,
            NULL
        );
    if(hFile != INVALID_HANDLE_VALUE)
    {
        CloseHandle(hFile);
        bFile = true;
    }       
    return bFile;
}
 
 
bool FindFile(LPCTSTR sPath, LPCTSTR sFind)
{
    bool bFind = false;
    char sDir[MAX_PATH];
    WIN32_FIND_DATA pDATA;
    strcat(strcpy(pDATA.cFileName,sPath),"\\*.*");
    HANDLE hFile = FindFirstFile(pDATA.cFileName,&pDATA);
    if(hFile != INVALID_HANDLE_VALUE)
    {
        do
        {
            if(strcmp(pDATA.cFileName,".")  == 0 ||
               strcmp(pDATA.cFileName,"..") == 0)
               continue;
            else
            {
                if(pDATA.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY)
                if(IsStrEqualMask(pDATA.cFileName, sFind))
                {
                    cout<<"Найден файл :["<<pDATA.cFileName<<"]\r\n";
                    bFind = true;
                    break;
                }
                else
                {
                    //Нашли подкаталог - ныряем в него
                    sprintf(sDir,"%s\\%s",sPath, pDATA.cFileName);
                    if((bFind = FindFile(sDir, sFind)))
                        break;//Если поиск успешен, сразу прекращаем поиск
                }
            }
        }
        while(FindNextFile(hFile,&pDATA));
    }
    return bFind;
}
 
bool IsStrEqualMask(LPCTSTR s, LPCTSTR sFind)
{
    bool bEqual = true;
    //шаблон может содержать ' ' '\\' ',' '.' '*'
    char delim[] = " \\,.*";
    char * sMask = new char[strlen(sFind) + 1];
    strcpy(sMask,sFind);
    
    char * buf = strtok(sMask,delim);
    while(buf)
    {
        if(!strstr(s,buf))
        {
            bEqual = false;
            break;
        }
        buf = strtok(NULL,delim);
    }
    delete [] sMask;
    return bEqual;
}
[Результат работы]
Каталог для поиска:
[D:\МОИДОК~1\0292~1\21EF~1]
Введите маску поиска
*.xls
Найден файл :[Общий баланс(сентябрь)-2011.xls]
Y - Повторить поиск


Добавлено через 1 минуту
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(IsStrEqualMask(pDATA.cFileName, sFind))
* * * * * * * * * * * * * * * * {
* * * * * * * * * * * * * * * * * * * * cout<<"Найден файл :["<<pDATA.cFileName<<"]\r\n";
* * * * * * * * * * * * * * * * * * * * bFind = true;
* * * * * * * * * * * * * * * * * * * * break;
* * * * * * * * * * * * * * * * }
* * * * * * * * * * * * * * * * else
* * * * * * * * * * * * * * * * {
* * * * * * * * * * * * * * * * * * * * //Нашли подкаталог - ныряем в него
* * * * * * * * * * * * * * * * * * * * sprintf(sDir,"%s\\%s",sPath, pDATA.cFileName);
* * * * * * * * * * * * * * * * * * * * if((bFind = FindFile(sDir, sFind)))
* * * * * * * * * * * * * * * * * * * * * * * * break;//Если поиск успешен, сразу прекращаем поиск
* * * * * * * * * * * * * * * * }
if((bFind = FindFile(sDir, sFind))) - рекурсивный обход всех подкаталогов

Добавлено через 10 минут
Вот код аналогичной функциональности позволяющий исключить ShlDialog
C
1
2
3
4
5
6
7
8
9
szFilePath[0] = '\0';
        cout<<"Введите каталог\r\n";
        cin.getline(szFilePath,MAX_PATH);
        if(szFilePath[0] == '\0')
            cout<<"Файл не выбран\r\n";
        else
        {
            if(IsFile(szFilePath))
            {
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru