Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Поиск файла по расширению


Автор: evgovs1991 2.11.2015, 18:56
Помогите найти ошибку
Код

String S;
    //Структура описывает файл
    WIN32_FIND_DATA FindFileData;
    //дескриптор потока
    HANDLE hf=FindFirstFile((Form5->Edit2->Text).c_str(), &FindFileData);//путь указываем где искать
    INT i=0;
    if (hf==INVALID_HANDLE_VALUE){ShowMessage("Папка не найдена"); return 1;}
        do{
            if (strstr((char*)FindFileData.cFileName,".exe") != NULL)//не работает условие..файлы есть но не находит
            {
                S=Form5->ListBox1->Items->Strings[Form5->ListBox1->ItemIndex];
                ShowMessage("Нашел");
            }
        }
        while (FindNextFile(hf,&FindFileData));
        FindClose(hf);

Автор: volatile 2.11.2015, 19:21
Цитата(evgovs1991 @  2.11.2015,  18:56 Найти цитируемый пост)
HANDLE hf=FindFirstFile((Form5->Edit2->Text).c_str(), &FindFileData);

что в этой строке?

Добавлено через 9 минут и 9 секунд
в общем там должны быть wildcards

а если таковими будет *.exe, то и нижнего условия не нужно вовсе.

Автор: evgovs1991 2.11.2015, 19:37
Цитата(volatile @ 2.11.2015,  19:21)
Цитата(evgovs1991 @  2.11.2015,  18:56 Найти цитируемый пост)
HANDLE hf=FindFirstFile((Form5->Edit2->Text).c_str(), &FindFileData);

что в этой строке?

Добавлено @ 19:30
в общем там должны быть wildcards

а если таковими будет *.exe, то и нижнего условия не нужно вовсе.

там указан путь к каталогу

Автор: volatile 2.11.2015, 19:42
Цитата(evgovs1991 @  2.11.2015,  19:37 Найти цитируемый пост)
там указан путь к каталогу 

там должно быть "путь_к_каталогу\*.*"

или лучше

"путь_к_каталогу\*.exe"
тогда
Цитата(volatile @  2.11.2015,  19:21 Найти цитируемый пост)
нижнего условия не нужно вовсе. 


Автор: evgovs1991 2.11.2015, 19:46
Цитата(volatile @ 2.11.2015,  19:42)
Цитата(evgovs1991 @  2.11.2015,  19:37 Найти цитируемый пост)
там указан путь к каталогу 

там должно быть "путь_к_каталогу\*.*"

или лучше

"путь_к_каталогу\*.exe"
тогда
Цитата(volatile @  2.11.2015,  19:21 Найти цитируемый пост)
нижнего условия не нужно вовсе. 

я так и пишу путь к каталогу...сперва нахожу все файлы в каталоге заношу их названия в ListBox а затем мне нужно открыть exe файл из этого каталога название которого выберу в Listbox/
Ну вот идея такая найти файл с расширением exe а потом сравнить с выбраным в Listbox если совпадают то открыть.

Добавлено через 2 минуты и 34 секунды
Цитата(volatile @ 2.11.2015,  19:42)
Цитата(evgovs1991 @  2.11.2015,  19:37 Найти цитируемый пост)
там указан путь к каталогу 

там должно быть "путь_к_каталогу\*.*"

или лучше

"путь_к_каталогу\*.exe"
тогда
Цитата(volatile @  2.11.2015,  19:21 Найти цитируемый пост)
нижнего условия не нужно вовсе. 

http://pixs.ru/showimage/SnimokPNG_6487872_19361699.png

Автор: volatile 2.11.2015, 19:53
evgovs1991,  просто выведи что в той строке, у вас там вообще пробелы

и не надо пользователей заставлять писать *.*
добавляйте это сами, если их нет

Автор: evgovs1991 2.11.2015, 19:54
Цитата(volatile @ 2.11.2015,  19:53)
evgovs1991,  просто выведи что в той строке, у вас там вообще пробелы

и не надо пользователей заставлять писать *.*
добавляйте это сами, если их нет

http://pixs.ru/showimage/SnimokPNG_3171858_19361719.png

Автор: volatile 2.11.2015, 20:14
evgovs1991, смотрите в дебагере,
В коде не вижу причину почему не находит.
походу, ошибки где-то в другом месте.

Добавлено через 51 секунду
например, уберите вообще условие strstr, посмотрите что найдет в этом случае

Автор: feodorv 3.11.2015, 10:42
Цитата(evgovs1991 @  2.11.2015,  18:56 Найти цитируемый пост)
strstr((char*)FindFileData.cFileName,".exe") != NULL
У Вас там не юникод, случайно? Зачем (char *)?

Автор: chaeman 30.11.2015, 20:22
так а в чем сложность, то? это основа

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)