Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ПОИСК ФАЙЛА В ВИНДОУС, DOC EXE TXT 
:(
    Опции темы
dark_religion
Дата 8.10.2006, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 198
Регистрация: 8.9.2006

Репутация: -3
Всего: -3



КАК НАЙТИ ФАЙЛ С ОПРЕДЕЛЕННЫМ РАСШИРЕНИЕМ?
НАПИРМЕР! .DOC .TXT .EXE
В CMD есть команда! FIND какой формад для поиска по типу?
PM MAIL   Вверх
Daevaorn
Дата 8.10.2006, 13:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



dark_religion, 
find ищет текст в файлах
Код

dir c:\*.txt /S /B

P.S. ногу с шифта сними
PM MAIL WWW   Вверх
Earnest
Дата 9.10.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



FindFirstFile \ FindNextFile


--------------------
...
PM   Вверх
fliengster
Дата 7.6.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.6.2008

Репутация: нет
Всего: нет



А как тогда решить задачю если нужно и подкатологи просматривать((((((?
PM MAIL   Вверх
EnergoHokum
Дата 7.6.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Код

const char fname_mask[]="*.doc";
WIN32_FIND_DATA find_file_data;
//-------------------------------------------------------------------------
#define NEW_SEARCH 0
#define NEXT_SEARCH 1
#define END_SEARCH 2
//-------------------------------------------------------------------------
int find_log_file(char* found_file,WIN32_FIND_DATA* pWFD,unsigned int action)
{ /* Поиск файлов */
    if(action > 2) { return 1; }
    HANDLE hFind=INVALID_HANDLE_VALUE;
    char filename[0xFF];
    char dir_spec[]="./";/* Поиск ведётся в текущей директории */
    /* Создаём маску поиска файлов */
    memcpy(&filename[0],dir_spec,strlen(dir_spec));
    memcpy(&filename[strlen(dir_spec)],fname_mask,strlen(fname_mask)+1);
    switch(action)
    {
    case NEW_SEARCH:
        {
            hFind=FindFirstFile(filename,pWFD);
            if(hFind == INVALID_HANDLE_VALUE)/* Если ничего не найдено */
            { found_file[0]='\0'; return -1; }
            /* Нашли файл, копируем путь к нему в переданный указатель на буфер */
            memcpy(&found_file[0],pWFD->cFileName,    \
                         strlen(pWFD->cFileName)+1                \
                         );
            break;
        }
    case NEXT_SEARCH:
        {
            if(FindNextFile(hFind,&find_file_data) != 0)
            {/* Продолжаем поиск подходящих файлов */
                /* Нашли следующий файл, копируем путь к нему в переданный указатель на буфер */
                memcpy(&found_file[0],pWFD->cFileName,    \
                             strlen(pWFD->cFileName)+1                \
                             );
            }
            else
            {
                return 1;
            }
            break;
        }
    case END_SEARCH:
        {
            FindClose(hFind);
            break;
        }
    return 0;
}


На работоспособность, если что, именно этот код я не проверял.

Это сообщение отредактировал(а) EnergoHokum - 7.6.2008, 12:30
PM MAIL ICQ   Вверх
Rififi
Дата 7.6.2008, 12:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 11
Всего: 36



Цитата(EnergoHokum @  7.6.2008,  12:29 Найти цитируемый пост)
На работоспособность, если что, именно этот код я не проверял.

- несовместима с unicode 
- thread-unsafe
- формирование маски неправильное
- "подкотологи" не просматривает
- утечки ресурсов
- нет фильтрации служебных записей (. и ..)
- поле cFileName имеет размер _MAX_PATH, а не 0xFF
- нет проверок на переполнение буфера

PM MAIL   Вверх
EnergoHokum
Дата 7.6.2008, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Это-же пример был.

А чому тут thread-unsafe? Вроде, static-переменных нету, параметры по указателям передаются (ну, кроме action, но он, я думаю, не важен).

Насчёт "подкотологов" -- в описании этих функций сказано: "If the string ends with a wildcard, period, or directory name, the user must have access to the root and all subdirectories on the path", из чего я сразу подумал, что в "подкотологи" при поиске они заходят.

Насчёт маски -- тоже не понял: "that can contain wildcard characters (* and ?)".

Утечка ресурсов -- потенциально, если не закрыть поиск, то да. Но всё это безобразие можно оформить в виде класса, и в деструктор затолкать закрытие.

И вообще, повторюсь, это был пример. smile
PM MAIL ICQ   Вверх
Rififi
Дата 7.6.2008, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 11
Всего: 36



Цитата(EnergoHokum @  7.6.2008,  12:58 Найти цитируемый пост)
А чому тут thread-unsafe? 

в функции FindNextFile используется глобальная переменная find_file_data

Цитата(EnergoHokum @  7.6.2008,  12:58 Найти цитируемый пост)
Насчёт маски -- тоже не понял: "that can contain wildcard characters (* and ?)".


эти строчки
 memcpy(&filename[0],dir_spec,strlen(dir_spec));
 memcpy(&filename[strlen(dir_spec)],fname_mask,strlen(fname_mask)+1);
на самом деле формируют вот что:

"*.doc"
а надо 
"./*.doc"

Добавлено через 2 минуты и 59 секунд
нет, насчёт маски я таки прогнал, извиняюсь. смутили  strlen'ы
PM MAIL   Вверх
EnergoHokum
Дата 7.6.2008, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Цитата
используется глобальная переменная find_file_data


Ну, так можно сделать её неглобальной, в функцию-то указатель на неё передаётся...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0519 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.