我询问如何在具有标准的子目录中查找。第一个答案是使用 FindFirstFileEx()。看来这个功能不适合这个目的,或者我用错了。

那么有人可以解释一下我将如何在文件夹及其所有子文件夹中搜索匹配的文件(给出一些示例标准) .doc;.txt;*.wri;并且比 2009-01-01 更新?

请给出这些标准的具体代码示例,以便我知道如何使用它。

如果不可能,是否有其他方法可以完成这项并非晦涩难懂的任务???我感到非常困惑,到目前为止还没有众所周知的/明显的工具/方法来做到这一点。

有帮助吗?

解决方案

微软软件定义网络:

如果您引用该页面中的代码片段:

#include <windows.h>
#include <tchar.h>
#include <stdio.h>

void _tmain(int argc, TCHAR *argv[])
{
   WIN32_FIND_DATA FindFileData;
   HANDLE hFind;

   if( argc != 2 )
   {
      _tprintf(TEXT("Usage: %s [target_file]\n"), argv[0]);
      return;
   }

   _tprintf (TEXT("Target file is %s\n"), argv[1]);
   hFind = FindFirstFileEx(argv[1], FindExInfoStandard, &FindFileData,
             FindExSearchNameMatch, NULL, 0);
   if (hFind == INVALID_HANDLE_VALUE) 
   {
      printf ("FindFirstFileEx failed (%d)\n", GetLastError());
      return;
   } 
   else 
   {
      _tprintf (TEXT("The first file found is %s\n"), 
                FindFileData.cFileName);
      FindClose(hFind);
   }
}

您将看到可以调用 FindFirstFileEx,其中 argv1 是要查找的字符串(LPCSTR)模式,&FindFileData 是包含找到的数据的文件信息的数据结构。hFind 是您在后续调用 FindNextFile 时使用的句柄。我认为您还可以通过使用 FindFirstFileEx 的第四个和第六个参数来添加更多搜索参数。

祝你好运!

编辑:顺便说一句,我认为您可以使用以下命令检查文件或目录的属性 获取文件属性() ..只需传递在 FileFindData 中找到的文件名..(我认为文件名可以指文件名或目录名)

编辑:MrVimes,这就是你可以做的(伪代码)

找到第一个文件(与*匹配)

  • 检查文件查找数据是否为“.”、“..”(这些不是真正的目录或文件)
    • 如果检查通过,请检查文件查找数据是否具有您正在查找的属性(即检查文件名、文件属性、 甚至可以在文件查找数据中检查文件创建时间, ,以及什么不是)并用它做任何事
      • 如果检查通过,则对该文件执行您需要执行的操作
    • 如果检查失败,则调用 findnextfile 或结束,由您决定

类似的东西..

其他提示

我觉得你用FindFirstFile找到全部的文件,而忽略其WIN32_FIND_DATA值的那些不符合搜索条件。

好了,你可以用它来搜索的* .doc,*。通过将这些值作为名称.txt和*扩展名为wri搜索:

FindFirstFileEx("*.doc", FindExInfoStandard, &fileData, FindExSearchNameMatch, NULL, 0);

要由日期搜索是有点复杂,但不是过度:

SYSTEMTIME createTime;
SYSTEMTIME searchDate;
FILETIME compareTime;
HANDLE searchHandle;

searchDate.wYear = 2009;
searchDate.wMonth= 1;
searchDate.wDay = 1;

SystemTimeToFileTime(searchDate, &compareTime);

searchHandle FindFirstFileEx("*", FindExInfoStandard, &fileData, FindExSearchNameMatch, NULL, 0);

if(searchHandle != INVALID_HANDLE_VALUE)
{
While(searchHandle != ERROR_NO_MORE_FILES)
{
FileTimeToSystemTime(fileData.ftCreationTime, &createTime);

if((ULARGE_INTEGER)compareTime < (ULARGE_INTEGER)createTime)
  printf("%s matches date criteria", fileData.cFileName);

FindNextFile(searchHandle, &fileData);
}
}

您需要做两个搜索。第一个就是找到子目录,和你这样做没有任何文件规范。为文件的第二搜索使用文件规范

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top