文件搜索c ++ [英] File Search c++

查看:111
本文介绍了文件搜索c ++的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在c ++中在Windows上搜索文件的最佳方法是什么。我应该使用boost还是有更好的方法。我遇到了一些建立文件系统库的问题。我发现这个:

what is the best way of searching files on windows in c++. Should I use boost or there is a better way . I'm encountering some problems with building filesystem library. I found this:

#include <stdio.h> 
#include <dir.h> 
#include <string.h> 
#define ALL_ATTS (FA_DIREC | FA_ARCH) 

void walker(const char *, const char *);

void walker(const char *path, const char *findme)
{
 struct ffblk  finder;
 unsigned int  res;

 chdir(path);

 for (res = findfirst("*.*", &finder, ALL_ATTS); res == 0; res = findnext(&finder))
 {
 if (strcmp(finder.ff_name, ".") == 0) continue;   /* current dir */
 if (strcmp(finder.ff_name, "..") == 0) continue;  /* parent dir  */

 /* 
 * If its a directory, examine it
 * else compare the filename with the one we're looking for
 */
 if (finder.ff_attrib & FA_DIREC)
 {
  char newpath[MAXPATH];
  strcpy(newpath, path);
  strcat(newpath, "\\");
  strcat(newpath, finder.ff_name);
  chdir(finder.ff_name);
  walker(newpath, findme);
  chdir("..");
  }
  else
  {
  if (strcmp(finder.ff_name, findme) == 0)
  {
    printf("Found in: %s\n", path);
   }
   }
  }
  }

   int main(void)
  {
  const char *root = "\\";
  char buf[BUFSIZ];

   printf ("This program will find a file on the current drive.\n"
      "Enter the name of the file to look for: ");

   fflush(stdout);  

   if (fgets(buf, sizeof(buf), stdin))
   {
   strtok(buf, "\n");  /* Remove the newline character */
   walker(root, buf);
   }

    return(0);
   }

但是没有一个dir头版本可以工作...

But none of the versions of dir headers works ...

推荐答案

我发现boost :: filesystem工作得很好,只要你知道你在做什么。以下适用于我:

I've found boost::filesystem to work quite well, as long as you know what you are doing. The following works for me:

#include <iostream>
#include <string>
#include "boost/filesystem.hpp"
namespace fs = boost::filesystem;

int _tmain(int argc, _TCHAR* argv[])
{
    const std::string start = "C:\\";
    const std::string findme = "winsock.dll";

    fs::recursive_directory_iterator end;
    fs::recursive_directory_iterator rdi(start);

    while(rdi != end)
    {
        const std::string path = rdi->path().string();
        if(path.find(findme) != std::string::npos)
        {
            std::cout << path << std::endl;
        }

        try
        {
            ++rdi;  // various system directories can bork this
        }
        catch(fs::filesystem_error e)
        {
            rdi.no_push();    // don't try to recurse into it
            ++rdi;
        }
    }

    return 0;
}

这篇关于文件搜索c ++的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆