找了这篇文章,转过来。。
貌似我写的程序不安全,呵呵,等下好好check一下。
文件的查找有如下几个函数FindFirstFile,FindNextFile以及FindClose 等。下面简单的来介绍一下这几个函数的使用方法:
HANDLE FindFirstFile(
LPCTSTR lpFileName,
LPWIN32_FIND_DATA lpFindFileData
);
如上为FindFirstFile函数的原型。lpFileName,是指向一个以0结尾的字符串指针,字符串包含一个有效的文件路径且文件名可以包含通配符*和?。lpFindFileData,是指向WIN32_FIND_DATA结构体的指针。这个结构体中填充文件或者子目录的信息。
若函数调用成功则返回一个句柄供FindNextFile和FindClose使用;调用失败则返回INVALID_HANDLE_VALUE,欲知详细的失败信息,可以调用GetLastError。
需要注意的是,你不能使用根目录加上’/’作为lpFileName,如“C:/Windows”或“C:/Windows/”。为了查看根目录下的文件,可以使用“C:/*”,然后用FindNextFile查询下一个目录。可以通过如下的方式“//server/service/*”去访问网络文件,而不能简单地使用“ //server/service”。检测一个目录是否为根目录,可以使用不加“/”这个目录的路径。例如:“C:/Windows”。它所返回的是这个目录的信息,而不是这个目录的中路径和文件的信息。有一点很重要:用“/”作为文件名结束来打开一个查询几乎总是要失败的。
应该很清醒的认识到有人可能会在你查询结构和修改信息的时候创建和删除你正在使用的文件,因此保险的做法就是使用CreateFile,并确定其属性为CREATE_NEW或者OPEN_EXISTING。
BOOL FindNextFile(
HANDLE hFindFile,
LPWIN32_FIND_DATA lpFindFileData
);
hFindFile为先前调用FindFirstFile的返回值。这个函数并不支持特定属性的查找,hFindFile就是要查询的文件名称。此函数返回文件名字的顺序依赖于文件系统的类型。在NTFS和CDFS格式的文件系统中是以字母表的顺序返回,在FAT文件系统中则是以文件写入磁盘的顺序来返回的。查找成功返回一个非0值,失败则返回0值。
BOOL FindClose(
HANDLE hFindFile
);
如同C语言一样在使用完文件后要记得关闭文件,这里关闭的是文件句柄。成功关闭返回一个非0值,失败则返回0值。