我问过在标准中找到子目录。第一个答案是使用FindFirstFileEx()。看来这个功能对这个目的没有好处,或者我用错了。
所以有人可以解释我将如何在文件夹中搜索,以及所有文件的子文件夹匹配(以提供一些示例标准) .doc; .txt; * .wri;并且比2009-01-01更新?
请提供这些标准的具体代码示例,以便我知道如何使用它。
如果不可能,是否有替代方法可以做到这一点并非完全模糊的任务?我变得非常困惑,到目前为止还没有众所周知/明显的工具/方法可以做到这一点。
答案 0 :(得分:3)
来自MSDN:
如果您参考该页面中的代码片段:
#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,其中argv 1是要查找的字符串(LPCSTR)模式,而&amp; FindFileData是包含找到的数据的文件信息的数据结构.hFind是你在FindNextFile的后续调用中使用的句柄。我认为你也可以通过使用FindFirstFileEx的第四和第六个参数来添加更多的搜索参数。
祝你好运! 编辑:BTW,我认为你可以使用GetFileAttributes()检查文件或目录的属性。只需传递FileFindData中找到的文件名..(文件名可以指我想的文件名或目录名)编辑:MrVimes,这是你能做的(伪代码)
找到第一个文件(与*匹配)
像这样......
答案 1 :(得分:0)
我认为您使用FindFirstFile
查找所有文件,并忽略WIN32_FIND_DATA
值与您的搜索条件不符的文件。
答案 2 :(得分:0)
您可以使用它来搜索* .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);
}
}
答案 3 :(得分:0)
您需要进行两次搜索。第一个是找到子目录,而你没有任何文件规范。第二次搜索文件使用文件规范。