相关疑难解决方法(0)

在C++中抓取递归ntfs目录的最快方法

我写了一个小的爬虫来扫描和求助目录结构.

它基于dirent(这是FindNextFileA的一个小包装)在我的第一个基准测试中,它是惊人的缓慢:

4500个文件大约123473ms(thinkpad t60p本地三星320 GB 2.5"HD).在123473毫秒找到121481个文件这个速度是否正常?

这是我的代码:

int testPrintDir(std::string  strDir, std::string strPattern="*", bool recurse=true){
  struct dirent *ent;
  DIR *dir;
  dir = opendir (strDir.c_str());
  int retVal = 0;
  if (dir != NULL) {
    while ((ent = readdir (dir)) != NULL) {
      if (strcmp(ent->d_name, ".") !=0 &&  strcmp(ent->d_name, "..") !=0){
        std::string strFullName = strDir +"\\"+std::string(ent->d_name);
        std::string strType = "N/A";
        bool isDir = (ent->data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) !=0;
        strType = (isDir)?"DIR":"FILE";                 
        if ((!isDir)){
             //printf ("%s <%s>\n", strFullName.c_str(),strType.c_str());//ent->d_name);
          retVal++;
        }   
        if (isDir && recurse){
             retVal …
Run Code Online (Sandbox Code Playgroud)

c++ directory recursion performance ntfs

6
推荐指数
1
解决办法
3036
查看次数

在NTFS卷上快速查找一组文件名,最好通过其MFT

我正在编写一个工具,可以找到适用于Mac和Windows的iTunes资料库的丢失文件.在Mac上,我可以通过使用精彩的"CatalogSearch"功能命名来快速查找文件.

但是,在Windows上,似乎没有用于按文件名搜索的OS API(或者是否存在?).

经过一些谷歌搜索,我了解到有一些工具(如TFind,Everything)直接读取NTFS目录并扫描它以按名称查找文件.

我想做同样的事情,但不必从头开始(虽然我过去写了很多磁盘工具,但我从来没有精力去挖掘NTFS).

我想知道是否有现成的库,可能是.dll,它会给我这个搜索功能:传入一个文件名,回到它的路径.

或者,Windows索引服务怎么样?至少当我在最近安装的XP Home系统上尝试此操作时," 开始"菜单下的" 搜索"操作实际上会扫描所有目录,这表明它没有完整的数据库.由于我根本不是Windows用户,我想知道为什么这不起作用.

最后,我需要的完整解决方案是:我有一个要查找的文件名列表,我需要搜索整个磁盘的代码(或者使用数据库)来一次性获取所有结果.例如,搜索不应该为我正在查找的每个文件启动新的完整扫描.这就是为什么我认为MFT方式是最优的,因为它可以快速迭代所有名称,将每个名称与我的列表进行比较.

windows filesystems ntfs ntfs-mft

5
推荐指数
1
解决办法
2663
查看次数

标签 统计

ntfs ×2

c++ ×1

directory ×1

filesystems ×1

ntfs-mft ×1

performance ×1

recursion ×1

windows ×1