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

Поиск с консоли - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 61, средняя оценка - 4.67
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
30.09.2009, 21:42     Поиск с консоли #1
вот решил прогу писать,которая ищет на компе все файлы с расширением doc,и все в них удаляет и добавляет звездочки...я только не знаю эту функцию поиска,помогите пожалуйста,надо найти все файлы,и записать их адреса в чар,чтобы потом пользовался с чаром как file_name, наверно понятно объяснилесли возможно то поболше комментарий,ведь с этой функцией в жизни не работалбуду благодарен
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
11.11.2009, 10:12     Поиск с консоли #21
Медведъ текст в doc файлах я тебе не заменю, не умею я с вордом работать(((
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
11.11.2009, 10:16  [ТС]     Поиск с консоли #22
-=ЮрА=-, почему именно с вордом?с файлом!...нельзя ли там создать указать на файл и вместо URL ввести рез-ты поиска?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
11.11.2009, 11:12     Поиск с консоли #23
-=ЮрА=-, ты абсолютно правильно делаешь, что ставишь в нужном месте конец строки.Честно говоря, я недоумеваю, почему ты мне объясняешь- я ведь нигде не сомневался в том, что она нужна.
C++
1
sPath[strlen(sPath) - strlen(strstr(sPath,"*.*"))] = '\0';
Я правил твой исходник 2 по-моему раза и везде сохранял эту строку, да и по- другому быть не может.
Но в последнем разе я усомнился, а в том ли месте находится эта строка?
И просто вынес её за пределы условия.
Но ты разъяснил, что в файловой системе FAT сканает и твой вариант. Ну, пусть так, хотя мой всё же видится мне более универсальным.

Добавлено через 2 минуты
Прокомментируй пожалуйста 14-е сообщение. Там TanT сомневается.

Добавлено через 6 минут
Медведь, это несерьёзно в конце концов.
Ты что, за 2175 сообщений не научился символы за звёздочки заменять? Тебя конец файла научить находить? Пора уже самому дела делать.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
11.11.2009, 11:28  [ТС]     Поиск с консоли #24
Цитата Сообщение от kravam Посмотреть сообщение
Ты что, за 2175 сообщений не научился символы за звёздочки заменять? Тебя конец файла научить находить? Пора уже самому дела делать.
а сообщения тут причем,не знал что народ судит п сообщениям какие у него знания,может я по ХТМЛ мастер.и вторе,заменять не проблема,и находит конец,я уже 649 раз пишу,НАДО РЕЗУЛЬТАТЫ ПОИСКА ЗАБИТЬ В fopen,теперь ясно??
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
11.11.2009, 17:30  [ТС]     Поиск с консоли #25
-=ЮрА=-, в твоем коде 16 ошибок
Error 3 error C2664: 'GetFileList' : cannot convert parameter 1 from 'char [260]' to 'LPTSTR' c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 18 proba
Error 4 error C2664: 'CharToOemW' : cannot convert parameter 2 from 'LPTSTR' to 'LPSTR' c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 28 proba
Error 5 error C2664: 'OemToCharW' : cannot convert parameter 1 from 'LPTSTR' to 'LPCSTR' c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 30 proba
Error 6 error C2664: 'strcat' : cannot convert parameter 1 from 'LPTSTR' to 'char *' c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 31 proba
Error 7 error C2664: 'strlen' : cannot convert parameter 1 from 'LPTSTR' to 'const char *' c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 34 proba
Error 8 error C2665: 'strstr' : none of the 2 overloads could convert all the argument types c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 34 proba
Error 9 error C2664: 'strlen' : cannot convert parameter 1 from 'WCHAR [260]' to 'const char *' c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 37 proba
Error 10 error C2665: 'strchr' : none of the 2 overloads could convert all the argument types c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 37 proba
Error 11 error C2664: 'strlen' : cannot convert parameter 1 from 'WCHAR [260]' to 'const char *' c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 40 proba
Error 12 error C2665: 'strstr' : none of the 2 overloads could convert all the argument types c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 40 proba
Error 13 error C2664: 'strcat' : cannot convert parameter 1 from 'LPTSTR' to 'char *' c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 45 proba
Error 14 error C2664: 'strlen' : cannot convert parameter 1 from 'LPTSTR' to 'const char *' c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 47 proba
Error 15 error C2664: 'strlen' : cannot convert parameter 1 from 'WCHAR [260]' to 'const char *' c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 47 proba
Error 16 error C2665: 'strrchr' : none of the 2 overloads could convert all the argument types c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 51 proba
Error 17 error C2665: 'strstr' : none of the 2 overloads could convert all the argument types c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 52 proba
Error 18 error C2664: 'CharToOemW' : cannot convert parameter 2 from 'WCHAR [260]' to 'LPSTR' c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 54 proba
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
11.11.2009, 19:23     Поиск с консоли #26
Цитата Сообщение от МедведЪ Посмотреть сообщение
НАДО РЕЗУЛЬТАТЫ ПОИСКА ЗАБИТЬ В fopen
Нет.
Я результаты поиска либо на консоль вывожу, либо в файл. Ты поспрашивай, может, знает кто, как результаты поиска забить в fopen.

Добавлено через 3 минуты
Далее.
Могу я узнать, что ты предпринимал, чтобы таких ошибок не совершалось? Твои действия.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
11.11.2009, 19:31     Поиск с консоли #27
Цитата Сообщение от МедведЪ Посмотреть сообщение
НАДО РЕЗУЛЬТАТЫ ПОИСКА ЗАБИТЬ В fopen
Результаты поиска можно "забить" в массив строк, а потом по очереди их в fopen подставлять...
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
11.11.2009, 21:51  [ТС]     Поиск с консоли #28
Цитата Сообщение от kravam Посмотреть сообщение
Могу я узнать, что ты предпринимал, чтобы таких ошибок не совершалось? Твои действия.
нет,я с такими вещями впервые столкнулся и в книжке нет
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
11.11.2009, 23:04     Поиск с консоли #29
Мда...
А перевести пытался на русский язык?

Я почему спрашиваю- это ОЧЕНЬ ЧАСТО ПОВТОРЯЮЩАЯСЯ ОШИБКА. И у меня и у многих.
Так что польза от перевода была бы большая. Раз перевёл- и ВСЕГДА будешь знать, что за ошибка.

Но даже если бы это была бы какая-нибудь редкая ошибка- всё равно надо переводить. Потому, что у тебя другого выхода нет.
Хотя да, можно ещё спросить на форуме.
Но вернёмся к нашим баранам.
Чё за ошибка-то?
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
11.11.2009, 23:22  [ТС]     Поиск с консоли #30
Ошибка 3 ошибка C2664: 'GetFileList': не может преобразовать параметр 1 от "Чар [260] 'на' LPTSTR 'C: \ Documents и Settings \ AG \ Мои документы \ Visual Studio 2008 \ Projects \ Проба \ Проба \ code.cpp 18 Проба
Ошибка 4 ошибка C2664: 'CharToOemW': не может преобразовать параметр 2 от "LPTSTR 'в' LPSTR 'C: \ Documents и Settings \ AG \ Мои документы \ Visual Studio 2008 \ Projects \ Проба \ Проба \ code.cpp 28 проба
Ошибка 5 ошибка C2664: 'OemToCharW': не может преобразовать параметр 1 от "LPTSTR 'в' LPCSTR 'C: \ Documents и Settings \ AG \ Мои документы \ Visual Studio 2008 \ Projects \ Проба \ Проба \ code.cpp 30 проба
Ошибка 6 ошибка C2664: 'StrCat': не может преобразовать параметра от 1 "до" Чар LPTSTR '*' C: \ Documents и Settings \ AG \ Мои документы \ Visual Studio 2008 \ Projects \ Проба \ Проба \ code.cpp 31 проба
7 ошибка ошибка C2664: 'StrLen': не может преобразовать параметра от 1 "до" LPTSTR 'сопзЬ Char *' C: \ Documents и Settings \ AG \ Мои документы \ Visual Studio 2008 \ Projects \ Проба \ Проба \ code.cpp 34 проба
8 ошибка ошибка C2665: 'strstr': никто из 2 перегрузок может конвертировать все аргументы типа C: \ Documents и Settings \ AG \ Мои документы \ Visual Studio 2008 \ Projects \ Проба \ Проба \ code.cpp 34 проба
Error 9 Ошибка C2664: 'StrLen': не может преобразовать параметр 1 от "WCHAR [260] 'на' сопзЬ Char * 'C: \ Documents и Settings \ AG \ Мои документы \ Visual Studio 2008 \ Projects \ Проба \ Проба \ код: \ Documents и Settings \ AG \ Мои документы \ Visual Studio 2008 \ Projects \ Проба \ Проба \ code.cpp 51 проба
Ошибка 17 ошибка C2665: 'strstr': никто из 2 перегрузок может конвертировать все аргументы типа C: \ Documents и Settings \ AG \ Мои документы \ Visual Studio 2008 \ Projects \ Проба \ Проба \ code.cpp 52 проба
Error 18 Ошибка C2664: 'CharToOemW': не может преобразовать параметр 2 от "WCHAR [260] 'на' LPSTR 'C: \ Documents и Settings \ AG \ Мои документы \ Visual Studio 2008 \ Projects \ Проба \ Проба \ code.cpp 54 Проба
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
11.11.2009, 23:30     Поиск с консоли #31
Правильно, не может!
Значит, надо это делать самому.
Умеешь?
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
11.11.2009, 23:41  [ТС]     Поиск с консоли #32
нет...был бы благодарен если помогли
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
16.02.2012, 17:58     Поиск с консоли #33
-=ЮрА=-, ещё одна ошибка:
C++
1
if(strstr(chBuf + 1,sExt))
Так нельзя, тогда если мы будем искать файлы с рашсирением .a, то нам выведутся
все батники! НАдо так:
C++
1
if(!(strcmp(chBuf + 1,sExt)))
-=ЮрА=-
Заблокирован
Автор FAQ
16.02.2012, 18:20     Поиск с консоли #34

Не по теме:

kravam, ты что некропостер???
chBuf - вхождение первой справа точки в имя файла, тобишь test.txt chBuf = ".txt" тогда
chBuf + 1 == "txt"
sExt - содержит в себе расширение так вот если chBuf + 1 содержит в себе sExt то файл будет выведен, нет то не выведен. Да если Ext == "a" а chBuf + 1 == "bat" то lf "bat" содержит в себе "a" можно использовать strcmp, а можно просто переставить strstr(sExt,chBuf + 1) местами или ввести доп проверку strlen єто уже на усмотрение программиста.
PS: ты бы ещё проект 5 летней давности освежил!Или ты меня научить чему то хочешь?



Добавлено через 2 минуты
Ну раз уж подняли тему
Поиск файла по шаблону
поиск файлов по строкам
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.02.2012, 19:16     Поиск с консоли #35
Просто вывод путей, но переделать под удаление несложно.

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
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <locale.h>
 
#define MAX_SIZE 512
 
#define __DEBUG
 
void show_files(const wchar_t * _path, const wchar_t * mask, char Recursive )
{
        WIN32_FIND_DATA data;
        HANDLE h;
        wchar_t temp[MAX_SIZE], nextpath[MAX_SIZE], path[MAX_SIZE];
        int n, len;
 
        wcscpy(path, _path);
 
        len = wcslen(_path);
 
        if ( _path[ len - 1] != '\\' )
        {
                path[len] = '\\';
                path[len + 1] = '\0';
        }
 
        wcscpy(temp, path);
        wcscat(temp, mask);
 
        h = FindFirstFile
        (
          temp,
          &data
        );
 
        
        if ( h != INVALID_HANDLE_VALUE )
        {
                
                do 
                {
                        wprintf(L"%s%s\n", path, data.cFileName);
                }
                while ( n = FindNextFile(h, &data ) );
        }
        
 
        FindClose(h);
 
        if ( Recursive )
        {
                wcscpy(temp, path);
                wcscat(temp, L"*.*");
 
                h = FindFirstFile
                (
                        temp,
                        &data
                );
 
                if ( h != INVALID_HANDLE_VALUE )
                {
                        do 
                        {
                                if ( 
                                        data.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY 
                                        && wcscmp(data.cFileName, L".") != 0 
                                        && wcscmp(data.cFileName, L"..") != 0 
                                )
                                {
                                        wcscpy(nextpath, path);
                                        wcscat(nextpath, data.cFileName);
                                        show_files( nextpath, mask, 1 );
                                }
                        }
                        while ( n = FindNextFile(h, &data ) );
                }
 
        }
 
        FindClose(h);
}
 
int main(int argc, char ** argv)
{
        
        wchar_t path[MAX_SIZE], mask[MAX_SIZE];
        setlocale(LC_CTYPE, "");
 
        wprintf(L"Введите начальную директорию\n");
        fgetws(path, MAX_SIZE, stdin);
        path[ wcslen(path) - 1] = 0;
 
        wprintf(L"Введите маску для поиска\n");
        wscanf(L"%s", mask);
 
        show_files(path, mask, 1);
 
        puts("\nDone.");
        system("pause");
 
        return 0;
}
Не совсем рабочий вариант с бустом(не совсем рабочий, потому что у меня вылетает сегфолт в конструкторе directory_iterator если в него подавать определенную папку, попробую обновить boost, мб пройдет).

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
#include <iostream>
#include <sstream>
#include <algorithm>
#include <vector>
#include <stack>
 
#include <boost/filesystem.hpp>
#include <boost/regex.hpp>
 
namespace fs = boost::filesystem;
 
void show_files( fs::path path, boost::wregex pattern )
{
    fs::directory_iterator it(path);
    fs::directory_iterator end;
    
    while ( it != end )
    {
        if ( boost::regex_match( it->path().filename().generic_wstring(), pattern ) )
            std::wcout << it->path().generic_wstring() << std::endl;
            
        if ( fs::is_directory( *it ) && !fs::is_symlink(*it) )
            try
            {
                show_files( it->path() , pattern );
            }
            catch (...) { }
            
        try
        {
            ++it;
        }
        catch (...) 
        {
            return;
        }
        
    }
    
}
 
void trim( std::wstring& str )
{
    static const std::wstring delimeters = L" \t\n";
    
    while ( str.length() > 0 && delimeters.find(str[0]) != std::string::npos )
        str.erase( str.begin() );
        
    while ( str.length() > 0 && delimeters.find(str[ str.length() - 1 ]) != std::string::npos )
        str.erase( str.end() - 1 );
}
 
int main()
{
    std::locale::global( std::locale("") );
    
    std::wcout << L"Введите начальную директорию" << std::endl;
    std::wstring path;
    std::getline(std::wcin, path);
    
    std::wcout << L"Введите маску для поиска файлов" << std::endl;
    std::wstring mask;
    std::getline(std::wcin, mask);
    
    trim(path);
    trim(mask);
    
    show_files( fs::path(path), boost::wregex(mask) );
}

Не по теме:

Хм... Тут же вроде только что был свежий пост >_<''

Jupiter
16.02.2012, 19:19
  #36

Не по теме:

Цитата Сообщение от diagon Посмотреть сообщение
Хм... Тут же вроде только что был свежий пост >_<''
был да сплыл да снова появился

easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
16.02.2012, 20:05     Поиск с консоли #37
kravam, -=ЮрА=-, давайте чуть спокойнее, без перехода на личности. Ну нашёл ошибку, ну исправил, ну молодец...
-=ЮрА=-
Заблокирован
Автор FAQ
16.02.2012, 21:11     Поиск с консоли #38

Не по теме:

easybudda, я был само спокойствие, ИМХО кто-то тут кого-то попросил освежить этот топик!



Добавлено через 2 минуты
Так же указал ссылки, их удалять на мой взгляд было ни к чему
поиск файлов по строкам
Поиск файла по шаблону
Пусть будут!
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
16.02.2012, 21:15     Поиск с консоли #39
Сказать честно- да. Меня попросили "Освежи топик". Раз просят- надо освежовывать. А ошибку я сам придумал.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2012, 01:45     Поиск с консоли
Еще ссылки по теме:

Поиск циклов в графе. Поиск центра взвешенного графа C++
C++ Поиск символа не могу переделать под поиск сочетания символов
Поиск числа в двумерном массиве (бинарный поиск) C++

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
17.02.2012, 01:45     Поиск с консоли #40
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Так же указал ссылки, их удалять на мой взгляд было ни к чему
Так я их и не удалял - 34 пост в этой теме. Если он у Вас не отображается - отпишите в ЛС, разберёмся...

kravam, хватит уже.
Тему закрывать не буду - свежая идея от diagon появилась, может и ещё кто что-нибудь по делу выдаст, но офтоп будет награждаться красивыми красными карточками и призовыми штрафными очками.
Yandex
Объявления
17.02.2012, 01:45     Поиск с консоли
Закрытая тема Создать тему
Опции темы

Текущее время: 16:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru