如何search计算机上的文件和文件夹

我需要一种方法来search计算机上的文件,如Windows资源pipe理器。 我想我的程序search让我们说硬盘驱动器c :. 我需要它来searchC:\文件夹和文件(只是你可以看到在C:\然后如果用户点击列表上的文件像文件夹testing(C:\testing),它会searchtesting,让用户可以看到其中的文件/文件夹。

Solutions Collecting From Web of "如何search计算机上的文件和文件夹"

既然你提到了windows,最直接的winapi方法就是使用FindFirstFile和FindNextFile函数。

编辑:这是一个示例,显示如何枚举目录中的所有文件/文件夹。

 #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算法的文件。 您可以假设整个目录结构是一个树 ,其中每个文件是一个叶节点,每个子目录是一个内部节点。

所以你所要做的就是

  1. 使用以下功能获取目录中的文件/文件夹列表:
    void getFilesFolders(vector<string> & dir_list, const string & folder_name)
  2. 如果是目录,则用目录名转到1
  3. 如果是文件,则终止,如果它是你正在寻找的文件,否则移动到下一个文件。

boost :: filesystem可以是一个跨平台的解决方案(查看它的功能)。

您可以使用Directory类成员使用C#或托管C ++来完成此操作。 请参阅以下MSDN文章:

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

如果你想在MFC中使用C ++,你可以使用CFileFind

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

您将不得不提供自己的浏览窗口来显示文件系统树。

或者你可以使用目录/文件控制之一来为你做。

  #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); } } 

真的没有必要使用第三方库来实现这一点。 这是一个简短的独立函数,它列出目录中的所有文件(及其路径),包括子目录的文件。 std::string folderName必须用\完成,如果你想列出所有的文件在计算机上,只需要在调用GetLogicalDriveStrings函数的时候创建一个循环(它返回字符串\ ,所以在这种情况下不会更方便)。

 void FindAllFiles(std::string folderName) { WIN32_FIND_DATA FileData; std::string folderNameWithSt = folderName + "*"; HANDLE FirstFile = FindFirstFile(folderNameWithSt.c_str(), &FileData); if (FirstFile != INVALID_HANDLE_VALUE) { do { if (strcmp(FileData.cFileName, ".") != 0 && strcmp(FileData.cFileName, "..") != 0) { if(FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { std::string NewPath = folderName + FileData.cFileName; NewPath = NewPath + "\\"; FindAllFiles(NewPath); } else { std::cout /*<< folderName*/ << FileData.cFileName << std::endl; } } } while(FindNextFile(FirstFile, &FileData)); } } 

这是ASCII版本,请记住文件和文件夹可以用Unicode命名