findfirstfile函数(FindFirstFile查找文件,使用通配符问题)

本文目录
- FindFirstFile查找文件,使用通配符问题
- c++中findfirstfile函数的使用
- C语言里面findfirst和findfirstfile的区别是什么
- C++中,什么函数可以统计当前目录下的文件个数
- C语言如何遍历目录 (C++也可以) findfirst findnext怎么用
- 如何用API函数判断文件是否存在
FindFirstFile查找文件,使用通配符问题
* 就可以了,不必用 *.*
FindFirstFile 不能查找子目录下的文件。但可以查找到文件夹,再通过递归调用可以实现目录完全查找。
或者使用SearchTreeForFile 函数
c++中findfirstfile函数的使用
#include "windows.h"
BOOL FileMove(TCHAR *pPath,TCHAR *pToPath);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
FileMove(TEXT("C:\\Program Files"),TEXT("C:\\MyFile"));
return 0;
}
BOOL FileMove(TCHAR *pFromPath,TCHAR *pToPath)
{
WIN32_FIND_DATA FindData;
HANDLE hFile;
TCHAR szFilePathName;
TCHAR szFullPathName;
lstrcpy(szFilePathName,pFromPath);
lstrcat(szFilePathName,TEXT("\\*.*"));
hFile=FindFirstFile(szFilePathName,&FindData);
if(hFile==INVALID_HANDLE_VALUE)
{
return FALSE;
}
while(TRUE)
{
if(FindData.cFileName!=TEXT(’.’))
{
wsprintf(szFullPathName,TEXT("%s\\%s"),pFromPath,FindData.cFileName);
if(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
TCHAR szToPath;
wsprintf(szToPath,TEXT("%s\\%s"),pToPath,FindData.cFileName);
CreateDirectory(szToPath,NULL);
FileMove(szFullPathName,szToPath);
}
else
{
TCHAR szFilePath;
wsprintf(szFilePath,TEXT("%s\\%s"),pToPath,FindData.cFileName);
CopyFile(szFullPathName,szFilePath,TRUE);
}
}
if(!FindNextFile(hFile,&FindData))
{
break;
}
}
FindClose(hFile);
return TRUE;
}
C语言里面findfirst和findfirstfile的区别是什么
findfirst函数原型是int
findfirst(char
*pathname,struct
ffblk
*ffblk,int
attrib);是查找指定的文件(查找pathname)如果查找成功返回0
,它一般与findnext一起用,用于对某个目录进行全部文件扫描。
findfirstfile我不是特别清楚,我认为在C中,返回的是一个指向查找到的文件的文件句柄。因为其原型是WIN32_FIND_DATA
FindFileData;
HANDLE
hFind;hFind
=
FindFirstFile("D:\\shzq\\a.txt",
&FindFileData);
if
(hFind
==
INVALID_HANDLE_VALUE)
{
printf
("Invalid
File
Handle.
GetLastError
reports
%d\n",
GetLastError
());
return
;
}
二者的不同就在于,一个是是否找到,另外一个是如果找到了,返回可以对该文件进行操作的指针(其实应该说是句柄,但在这个意义上,我觉得二者有共同之处)。
C++中,什么函数可以统计当前目录下的文件个数
VB声明
Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
说明
根据文件名查找文件
返回值
Long,如执行成功,返回一个搜索句柄。如果出错,返回一个INVALID_HANDLE_VALUE常数,一旦不再需要,应该用FindClose函数关闭这个句柄
参数表
参数 类型及说明
lpFileName String,欲搜索的文件名。可包含通配符,并可包含一个路径或相对路径名
lpFindFileData WIN32_FIND_DATA,这个结构用于装载与找到的文件有关的信息。该结构可用于后续的搜索
注解
由这个函数返回的句柄可以作为一个参数用于FindNextFile函数。这样一来,就可以方便的枚举出与lpFileName参数指定的文件名相符的所有文件
VC声明
BOOLFindNextFile(
HANDLE hFindFile, //searchhandle
LPWIN32_FIND_DATA lpFindFileData //databuffer
);
功能说明
继续查找FindFirstFile函数搜索后的文件
参数说明
HANDLE hFindFile搜索的文件句柄 函数执行的时候搜索的是此句柄的下一文件
LPWIN32_FIND_DATA lpFindFileData 指向一个用于保存文件信息的结构体
返回值
如果调用成功返回一个非0值
调用失败 返回为0 可调用GetLastError来获取错误信息
更多信息可以查看MSDN,顺便说明这是Windows提供的API。
C语言如何遍历目录 (C++也可以) findfirst findnext怎么用
#include 《windows.h》
#include 《stdio.h》
FILE *fp;
void findFile(char filePath)//这个是你要的函数
{
char szFind;//这是要找的
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
char szFile;
strcpy(szFind,filePath);
strcat(szFind,"\\*.*");//利用通配符找这个目录下的所以文件,包括目录
hFind=FindFirstFile(szFind,&FindFileData);
if(INVALID_HANDLE_VALUE == hFind) return;
while(TRUE)
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//这是目录
{
if(FindFileData.cFileName!=’.’)//.表示当前目录,因为每个目录下面都有两个默认目录就是..和.分别表示上一级目录和当前目录
{
strcpy(szFile,filePath);
strcat(szFile,"\\");
strcat(szFile,FindFileData.cFileName);
findFile(szFile);//寻找这个目录下面的文件
}
}
else
{
fprintf(stdout,"%s\\%s\n",filePath,FindFileData.cFileName);//打印出目录下的文件的路径和名称
fprintf(fp,"%s\\%s\n",filePath,FindFileData.cFileName);//这将结果存档到c:\\path.txt中。
}
if(!FindNextFile(hFind,&FindFileData))//寻找下一个文件
break;
}
FindClose(hFind);//关闭句柄
}
int main()
{
fp = fopen("C:\\path.txt","w");
findFile("D:\\e-book\\实习\\随笔\\读书ing");//这里是你要遍历的目录,你自己可以改变,它会显示这个目录下的所有文件,包括这个目录下子目录下的文件。
fclose(fp);
return 0;
}
程序如上,是把结果输出到标准输出上,并且存档到C:\\path.txt中。
可以运行的,我已经测试过。
工具是vc6.0.
如何用API函数判断文件是否存在
BOOL FindFirstFileExists(LPCTSTR lpPath, DWORD dwFilter)
{
WIN32_FIND_DATA fd;
HANDLE hFind = FindFirstFile(lpPath, fd);
BOOL bFilter = (FALSE == dwFilter) ? TRUE : fd.dwFileAttributes dwFilter;
BOOL RetValue = ((hFind != INVALID_HANDLE_VALUE) bFilter) ? TRUE : FALSE;
FindClose(hFind);
return RetValue;
}
// 检查一个路径是否存在(绝对路径、相对路径,文件或文件夹均可)
BOOL FilePathExists(LPCTSTR lpPath)
{
return FindFirstFileExists(lpPath, FALSE);
}
// 检查一个文件夹是否存在(绝对路径、相对路径均可)
BOOL FolderExists(LPCTSTR lpPath)
{
return FindFirstFileExists(lpPath, FILE_ATTRIBUTE_DIRECTORY);
}

更多文章:
tomcat的默认端口(tomcat打开8443端口是怎么回事)
2026年4月19日 12:15
constantly中文翻译(翻译:When you constantly live your life in Have)
2026年8月13日 13:30
javajsch下载图片(JAVA_JSCH如何远程操作SFTP服务器上的文件)
2026年9月23日 03:00
oracle vm virtualbox使用(oracle virtualbox 虚拟机网络)
2026年8月12日 12:00
coriander(coriander是什么东西啊怎么翻译)
2026年2月19日 00:00
idea无法创建springboot项目(如何用idea创建 spring boot工程)
2025年8月8日 17:30
whatsoever(whatsoever 这个词是什么意思啊 大家帮忙!)
2025年7月15日 03:45
数据库误删后能恢复吗(如果数据库的数据被你不小心删了 怎样恢复啊)
2025年6月25日 03:45
王业不偏安的下一句王业不偏安的下一句是什么?王业不偏安是什么意思 王业不偏安的原文及翻译
2026年9月13日 16:45
算法导论第三版pdf(《算法导论》第二版和第三版的区别大吗有中文版的吗)
2025年8月1日 01:30












