как искать компьютер файлы и папки

мне нужен способ искать компьютер файлы как Windows Explorer. я хочу, чтобы моя программа искала, позволяет, говорят что жесткий диск c:. мне нужен он для поиска C:\ папки и файлы (просто те, Вы видели в c:\ затем, если бы пользователь нажимает на файл в списке как тест папки (C:\test), это искало бы тест и позволило бы пользователю видеть, какие файлы/папки находятся в нем.

13
задан Jacob 29 July 2010 в 18:21
поделиться

5 ответов

Поскольку вы упомянули Windows, самый простой способ сделать это с помощью winapi - использовать функции FindFirstFile и FindNextFile .

edit: Вот пример, который показывает, как перечислить все файлы / папки в каталоге.

#include <Windows.h>
#include <iostream>


int main()
{
    WIN32_FIND_DATA file;
    HANDLE search_handle=FindFirstFile(L"C:\\*",&file);
    if (search_handle)
    {
        do
        {
            std::wcout << file.cFileName << std::endl;
        }while(FindNextFile(search_handle,&file));
        FindClose(search_handle);

    }

}
14
ответ дан 1 December 2019 в 21:11
поделиться

Это будет зависеть от ОС. Вопрос SO

Как я могу получить список файлов в каталоге с помощью C или C ++?

хорошо справляется с этой проблемой. Вы можете скачать DIRENT здесь.

Теперь, когда у вас есть это, я бы рекомендовал рекурсивно искать файл с помощью алгоритма DFS / BFS . Вы можете предположить, что вся структура каталогов представляет собой дерево , где каждый файл является листовым узлом, а каждый подкаталог является внутренним узлом.

Все, что вам нужно сделать, это

  1. Получить список файлов / папок в каталоге с помощью такой функции, как:
    void getFilesFolders (vector & dir_list, const string & folder_name)
  2. Если это каталог, перейдите к 1 с именем каталога
  3. Если это файл, завершите работу, если это файл, который вы ищете, иначе перейдите к следующему файлу.
6
ответ дан 1 December 2019 в 21:11
поделиться
 #include <Windows.h>
#include <iostream>


int FindF(char* pDirectory)
{
    char szFindPath[MAX_PATH] = {0};
    strcpy(szFindPath, pDirectory);
    strcat(szFindPath, "\\*");
    WIN32_FIND_DATA file;
    HANDLE search_handle=FindFirstFile(szFindPath,&file);
    if (search_handle)
    {
        do
        {
            if(file.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
            {
              strcpy(szFindPath, pDirectory);
              strcat(szFindPath, "\\");
              strcat(szFindPath, file.cFileName);
              FindF(szFindPath);
            }
            std::wcout << file.cFileName << std::endl;
        }while(FindNextFile(search_handle,&file));
        CloseHandle(search_handle);

    }

}
2
ответ дан 1 December 2019 в 21:11
поделиться

Вы можете использовать Directory члены класса для этого в C# или управляемом C++. См. следующую статью MSDN:

http://support.microsoft.com/kb/307009

Если вы хотите использовать C++ с MFC, вы можете использовать CFileFind

http://msdn.microsoft.com/en-us/library/f33e1618%28v=VS.80%29.aspx

Вам придется создать собственное окно просмотра для представления дерева файловой системы.

Или вы можете использовать один из элементов управления каталогами/файлами, чтобы сделать и то, и другое за вас.

2
ответ дан 1 December 2019 в 21:11
поделиться

boost :: filesystem может быть кроссплатформенным решением для этого (обратите внимание на такие функции в нем).

2
ответ дан 1 December 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: