扫描目录以查找并打开该文件

时间:2014-03-19 18:26:14

标签: c++ file search directory

我想创建一个程序,让用户输入驱动器名称/文件夹(C:\f:\folder\)和文件名(test.exe),然后程序搜索给定驱动器中的文件或文件夹并打开文件。我设法做了打开文件的功能,但无法弄清楚如何搜索文件传递找到的文件的位置打开它。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

您可以使用boost :: file_system。以下是文档:http://www.boost.org/doc/libs/1_55_0/libs/filesystem/doc/index.htm

编辑:过了一段时间,我发现我的主题已经脱离主题了。要检查文件是否存在,可以使用特殊的boost :: filesystem函数。

bool exists(const path& p);

<强> /修改

目录迭代器示例:http://www.boost.org/doc/libs/1_55_0/libs/filesystem/doc/tutorial.html#Directory-iteration

该示例使用了std :: copy,但您需要文件名。所以你可以这样做。

#include <boost/filesystem.hpp>

namespace bfs = boost::filesystem;
std::string dirPath = "."; // target directory path
boost::filesystem::directory_iterator itt(bfs::path(dirPath)); // iterator for dir entries
for ( ; itt != boost::filesystem::directory_iterator(); itt++)
{
   const boost::filesystem::path & curP = itt->path();
   if (boost::filesystem::is_regular_file(curP)) // check for not-a-directory-or-something-but-file
   {
      std::string filename = curP.string(); // here it is - filename in a directory
      // do some stuff
   }
}

如果你没有精力充沛 - 建设它可能会很复杂。 您可以通过boost.teeks99.com获取编译器和平台的预制增强二进制文件

另外,如果由于某些原因你不能使用boost,那么迭代目录会有特定于平台的方法,但我不知道你在哪个平台上,所以我不能为你提供一个例子。

答案 1 :(得分:-2)

试试这个:

char com[50]="ls ";
char path[50]="F:\\folder\\";
char file[50]="test.exe";

strcat(com,path);
strcat(com,file);

if (!system(com))  // system returns the return value of the command executed
    cout<<"file not present\n";
else
{
    cout<<"file is present\n";
    strcat(path,file);

    FILE* f = fopen(path,"r");

    //do your file operations here
}