Задача на поиск файлов

Тема в разделе "MS Visual C++", создана пользователем -, 1 ноя 2010.

  1. Гость

    У меня такая проблема. При запуске программы необходимо в определённой папке найти все DLL файлы, после чего загрузить их. Меня интересует только их поиск. Подскажите, пожалуйста, прототип функции, которая перечисляет все файлы одного расширения в одной папке (желательно и в подпапках). Заранее спасибо за ответ.
     
  2. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    FindFirst();
    FindNext();
    FindClose();
    Клац.
     
  3. Гость

    Спасибо за названия. Полные прототипы уже нашёл. Но прошу ответить и на следующие вопросы:
    1. Как использовать WIN32_FIND_DATA (имя файла нужно указывать и в вызове функции, и в структуре, для чего?). Чем-то напоминает параметры в поиске, не правда ли?
    2. А что за хэндл возвращает функция?
    3. И собственно, откуда можно взять полное имя файла уже после поиска?
    4. Как определить, когда найдены все файлы?
    5. В подкаталогах файлы ищет, если нет, то как это сделать? <_<
    Ламером прошу не считать, MSDN нету, на других сайтах ничего не смог найти. ;)
     
  4. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    msdn.microsoft.com
    В структуре не надо. Там просто поля в которых будет хранится данные о файле.
    файндферст возвращает хендл - указатель для двух других ф-й. Что бы они знали с чем работать. Очевидно же.
    Написано в справке. файнднекст вернет фолс.
    Рекурисей.
    Путь известен заранее. Имя файла нахоится в структуре. В чем проблема?
    Считаю не то что Ламером - а тупым школьником. Ничего личного, но вы бы хоть потрудились посмотреть, то, что по по ссылке которую я привел выше.
     
  5. Гость

    Про школьника Вы правы - я ещё в 6-м классе. А за msdn и вообще за помощь большое спасибо. ;)
     
  6. Гость

    Извините, просто не заметил ссылку.

    Добавлено: Спасибо огромное за ссылку, кое-что нашёл. Больше вопросов нет.
     
  7. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    А смысл грузить то чего не знаешь????
    А если знаешь, то зачем искать тогда, просто подгружай?

    Расскажи свою конечную цель то? ;-) Интересно очень :)
     
  8. Гость

    DLL файлы, которые нужно найти - это дополнения для одной маленькой игры, которую собираюсь написать. Когда найдена DLL, она загружается, после чего необходимо вызвать нечто вроде InitAddin (), и так далее. В гугле нашёл вот такой пример (если кому будет интересно):
    Код (C++):
    typedef void (*LPSEARCHFUNC) (LPCTSTR lpszFileName);

    BOOL SearchFiles (LPCTSTR lpszFileName, LPSEARCHFUNC lpSearchFunc, BOOL bInnerFolders = TRUE)
    {
    LPTSTR part;
    char tmp[MAX_PATH]; // Временный массив
    char name[MAX_PATH];
    HANDLE hSearch = NULL;
    WIN32_FIND_DATA wfd;
    memset (&wfd, 0, sizeof (WIN32_FIND_DATA));
    // Сначала поиск внутри вложенных папках ...
    if (bInnerFolders)
    {
    if (GetFullPathName (lpszFileName, MAX_PATH, tmp, &part) == 0)
    return FALSE;
    strcpy (name, part);
    strcpy (part, "*.*");
    // Если папки существуют, то делаем поиск
    wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
    if (!((hSearch = FindFirstFile (tmp, &wfd)) == INVALID_HANDLE_VALUE))
    do
    {
    // В каждой папке есть две папки с именами "." и ".."
    // И эти папки мы не трогаем
    // Пропускаем папки "." и ".."
    if (!strncmp (wfd.cFileName, ".", 1) || !strncmp (wfd.cFileName, "..", 2))         
    continue;      
    if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // Если мы нашли папку
    {
    char next[MAX_PATH];
    if (GetFullPathName (lpszFileName, MAX_PATH, next, &part) == 0)
    return FALSE;
    strcpy (part, wfd.cFileName);
    strcat (next, "\\");
    strcat (next, name);
    SearchFiles (next, lpSearchFunc, TRUE);
    }
    }
    while (FindNextFile (hSearch, &wfd)); // Ищем следующий файл
    FindClose (hSearch); // Заканчиваем поиск
    }
    if ((hSearch = FindFirstFile (lpszFileName, &wfd)) == INVALID_HANDLE_VALUE)
    return TRUE; // В противном случае выходим
    do
    if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) // Если мы нашли файл
    {
    char file[MAX_PATH];
    if (GetFullPathName (lpszFileName, MAX_PATH, file, &part) == 0) return FALSE;
    strcpy (part, wfd.cFileName);
    lpSearchFunc (file);
    }
    while (FindNextFile (hSearch, &wfd)); // ищем следующий файл
    FindClose (hSearch); // заканчиваем поиск
    return TRUE;
    }
    Что-то я не нашёл, где именно скачивать. А каков вообще размер MSDN? Больше 100 мб не смогу выкачать.
     
  9. Гость

    Извините, rrrFer, я не совсем понял следующее:
    Объясните подробнее, пожалуйста.
    Весьма полное определение.
     
  10. Гость

    А где взять справку windows и какого она размера?
     
  11. Гость

    Вот, нашёл ответ. Нужно добавить ключ /B после команды dir, вот так:
    dir /B | findstr ".dll" > result.txt
    У меня всё нормально работает.
     
  12. Гость

    Опять поднимаю вопрос про MSDN. Я нигде не нашёл кнопки для скачивания на msdn.microsoft.com. Подскажите прямую ссылку, пожалуйста. И ещё, какого размера MSDN для Visual C++ 6.0?
     
Загрузка...
Похожие Темы - Задача на поиск
  1. elzim
    Ответов:
    0
    Просмотров:
    932
  2. ShaoKahn
    Ответов:
    0
    Просмотров:
    1.131
  3. eremin-sanek
    Ответов:
    3
    Просмотров:
    1.108
  4. MonteCristo
    Ответов:
    1
    Просмотров:
    852
  5. bort
    Ответов:
    1
    Просмотров:
    1.181

Поделиться этой страницей