мне нужен способ искать компьютер файлы как Windows Explorer. я хочу, чтобы моя программа искала, позволяет, говорят что жесткий диск c:. мне нужен он для поиска C:\ папки и файлы (просто те, Вы видели в c:\ затем, если бы пользователь нажимает на файл в списке как тест папки (C:\test), это искало бы тест и позволило бы пользователю видеть, какие файлы/папки находятся в нем.
Поскольку вы упомянули 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);
}
}
Это будет зависеть от ОС. Вопрос SO
Как я могу получить список файлов в каталоге с помощью C или C ++?
хорошо справляется с этой проблемой. Вы можете скачать DIRENT здесь.
Теперь, когда у вас есть это, я бы рекомендовал рекурсивно искать файл с помощью алгоритма DFS / BFS . Вы можете предположить, что вся структура каталогов представляет собой дерево , где каждый файл является листовым узлом, а каждый подкаталог является внутренним узлом.
Все, что вам нужно сделать, это
void getFilesFolders (vector & dir_list, const string & folder_name)
#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);
}
}
Вы можете использовать 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
Вам придется создать собственное окно просмотра для представления дерева файловой системы.
Или вы можете использовать один из элементов управления каталогами/файлами, чтобы сделать и то, и другое за вас.
boost :: filesystem может быть кроссплатформенным решением для этого (обратите внимание на такие функции в нем).