文件操作相关函数

 

1、DeleteFile 函数         ------ 删除指定存在的文件。

 

2、CopyFile 函数  -------- 拷贝指定存在的文件到目标路径文件。

3、MoveFile 函数       -------- 移动一个已存在的文件或者文件夹到新的位置。

4、CreateFile 函数    -------- 创建或打开文件或 I/O 设备。常用的 I/O 设备有:文件,文件流,目录,物理磁盘,卷,控制台缓冲区,磁带驱动器,通信资源,邮筒和管道。

5、CloseHandle 函数   ------- 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等等。

 

6、GetFileSize 函数     --------该函数用于获取指定文件的大小(长度),以字节为单位!

 

7、GetFileSizeEx 函数  -------- 和GetFileSize 函数的功能基本一致,该函数也是用于获取指定文件的大小(长度),以字节为单位!
 
8、WriteFile 函数         ---------  从文件指针指向的位置开始将数据写入到一个文件中, 且支持同步和异步操作。
 
9、ReadFile 函数    -------从文件指针指向的位置开始将文件数据读入内存中, 且支持同步和异步操作。
 
10、SetFilePointer 函数   -------使用 SetFilePointer 函数设置文件当前的读写位置。

11、SetFilePointerEx 函数  ----使用 SetFilePointerEx 函数设置文件当前的读写位置。

12、CreateDirectory 函数  ----创建一个新的单一层级的目录

13、RemoveDirectory 函数  ----删除一个现有的不包含任何文件的空目录。要删除非空目录请调用:SHFileOperation

14、FindFirstFile 函数  ----根据文件名查找文件。

15、FindNextFile 函数  -----可以用来遍历目录或文件,判断当前目录下是否有下一个目录或文件。

 

 

--------------------------------------------

 

1、DeleteFile 函数

简介:
可以使用 DeleteFile 删除指定存在的文件。

语法格式:

 

1 BOOL WINAPI DeleteFile(
2   _In_  LPCTSTR lpFileName
3 );
lpFileName
必选项,指定要删除文件的路径。

返回值: 
函数执行成功,返回 TRUE ,否则返回 FALSE ,可使用 GetLastError 获取错误码。

备注:如果程序尝试删除一个不存在的文件,GetLastError 返回 ERROR_FILE_NOT_FOUND。如果文件是只读的,则 GetLastError 返回 ERROR_ACCESS_DENIED。
 
2、CopyFile 函数
简介:
可以使用 CopyFile 拷贝指定存在的文件到目标路径文件。
语法格式:
1 BOOL CopyFile(
2   LPCTSTR lpExistingFileName,
3   LPCTSTR lpNewFileName,
4   BOOL    bFailIfExists
5 );

参数:
lpExistingFileName:要拷贝的源文件的路径
lpNewFileName:要拷贝到的目标文件的路径
bFailIfExists:传递TRUE:如果目标文件已经存在,不拷贝,CopyFile 返回 FALSE,
传递 FALSE,如果目标文件已经存在,覆盖目标文件

返回值: 
函数执行成功,返回 TRUE ,否则返回 FALSE ,可使用 GetLastError 获取错误码。

3、MoveFile 函数

简介:
可以使用 MoveFile 移动一个已存在的文件或者文件夹到新的位置。

语法格式:

 

1 BOOL MoveFile(
2   LPCTSTR lpExistingFileName,
3   LPCTSTR lpNewFileName
4 );

参数:
lpExistingFileName:要移动的源文件或者文件夹的路径
lpNewFileName:要移动到的目标文件或者文件夹的路径

返回值: 
函数执行成功,返回 TRUE ,否则返回 FALSE ,可使用 GetLastError 获取错误码。

4、CreateFile 函数

简介:
创建或打开文件或 I/O 设备。常用的 I/O 设备有:文件,文件流,目录,物理磁盘,卷,控制台缓冲区,磁带驱动器,通信资源,邮筒和管道。
该函数返回一个句柄,该句柄可用于根据文件或设备以及指定的标志和属性访问文件或设备以获取各种类型的 I/O。

语法格式:

 

1 HANDLE WINAPI CreateFile(
2   _In_     LPCTSTR               lpFileName,
3   _In_     DWORD                 dwDesiredAccess,
4   _In_     DWORD                 dwShareMode,
5   _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
6   _In_     DWORD                 dwCreationDisposition,
7   _In_     DWORD                 dwFlagsAndAttributes,
8   _In_opt_ HANDLE                hTemplateFile
9 );

 

参数
lpFileName
    要创建或打开的文件或设备的名称。 可以在这个名字中使用正斜杠(/)或反斜杠(\)【注意/是转义符号】。在该函数的ANSI版本中,该名称的长度仅限于MAX_PATH字符。要将此限制扩展为32,767个宽字符,请调用该函数的Unicode版本并将“\\?\”添加到路径中。

dwDesiredAccess
    所请求的文件或设备访问权限。

含义
0 不希望从设备读取数据或向设备写入数据。如果只想改变设备的配置(如:修改文件的时间戳),可以传0
GENERIC_READ 允许对设备进行只读访问
GENERIC_WRITE 允许对设备进行只写访问,该选项并没有隐含 GENERIC_READ标志

dwShareMode
    文件或设备的请求共享模式。

含义
0 要求独占对设备的访问。如果设备已经打开,CreateFile 调用会失败;如果成功地打开了设备,后续的 CreateFile 调用会失败
FILE_SHARE_READ 如果有其他对象要用该设备,我们要求它们不得修改设备的数据;如果设备已经以写入方式或独占方式打开,那么CreateFile调用会失败
FILE_SHARE_WRITE 如果有其他内核对象要使用该设备,则要求它们不得读取设备的数据
FILE_SHARE_DELETE 当对文件进行操作的时候,我们不关心文件是否被逻辑删除或移动。在Windows内部,系统会先将文件标记为待删除,然后当该文件所有已打开的句柄都被关闭的时候,再将其真正的删除



lpSecurityAttributes
    指向 SECURITY_ATTRIBUTES 结构的指针,该结构包含两个独立但相关的数据成员:一个可选的安全描述符以及一个布尔值,该值确定返回的句柄是否可以被子进程继承。该参数可以是NULL。
如果此参数为NULL,则由CreateFile返回的句柄不能由应用程序可能创建的任何子进程继承,并且与返回句柄关联的文件或设备将获得默认安全描述符。一般都是直接将该参数设置为NULL。

dwCreationDisposition
采取存在或不存在的文件或设备的操作。

含义
CREATE_NEW 告诉CreateFile创建一个新文件,如果同名文件已经存在,那么 CreateFile调用会失败
CREATE_ALWAYS 告诉CreateFile无论同名是否存在都创建新文件,若文件存在,则覆盖
OPEN_EXISTING 告诉CreateFile打开一个已有的文件或设备,如果文件或设备不存在,那么CreateFile调用会失败
OPEN_ALWAYS 告诉CreateFile打开一个已有的文件,如果文件存在,那么CreateFile会直接打开文件,如果不存在,则会创建一个新文件
TRUNCATE_EXISTING 告诉CreateFile打开一个已有的文件并将文件大小截断为0字节,如果文件不存在,那么CreateFile调用会失败



dwFlagsAndAttributes
该参数的用途:
允许我们设置一些标志来微调与设备之间的通信;
如果设备是一个文件,我们还能够设置文件的属性。

含义
通信标志–缓存  
FILE_FLAG_NO_BUFFERING 该标志表示在访问文件的时候不要使用任何数据缓存
FILE_FLAG_SEQUENTIAL_SCAN 指定系统顺序地访问文件,系统从文件读取的数据量会超过我们的要求(减少硬盘访问),指定了FILE_FLAG_NO_BUFFERING标志,该标志不生效
FILE_FLAG_RANDOM_ACCESS 该标志表示系统不要提前读取文件数据(指定FILE_FLAG_NO_BUFFERING,则该标志不生效)
FILE_FLAG_WRITE_THROUGH 禁止写入文件时,将数据缓存在内存中(减少数据丢失的可能性)
通信标志–其他标志  
FILE_FLAG_DELETE_ON_CLOSE 文件所有的句柄都被关闭后,删除该文件
FILE_FLAG_BACKUP_SEMANTICS 用于备份和恢复软件。在打开或创建任何文件之前,为了确保视图打开文件或创建文件的进程具有所需的访问特权
FILE_FLAG_POSIX_SEMANTICS 让CreateFile在创建文件或打开文件时,以区分大小写的方式来查找文件名
FILE_FLAG_OPEN_REPARSE_POINT 告诉系统忽略文件的重解析属性(重解析属性允许一个文件系统过滤器对打开文件、读取文件、写入文件以及关闭文件这些行为进行修改)
FILE_FLAG_OPEN_NO_RECALL 该标志告诉系统不要将文件内容刚从脱机存储器(offline storage,比如磁带)恢复到联机存储器(即online storage, 如硬盘)
FILE_FLAG_OVERLAPPED 该标志告诉系统我们想以异步方式来访问设备
文件设置  
FILE_ATTRIBUTE_ARCHIVE 应用程序用该标志来将文件标记为待备份或待删除。当CreateFile创建一个新文件时,会自动设置该标志
FILE_ATTRIBUTE_ENCRYPTED 文件是经过加密的
FILE_ATTRIBUTE_HIDDEN 文件是隐藏的。它不会出现在通常的目录清单中
FILE_ATTRIBUTE_NORMAL 文件没有其他属性。只有单独使用的时候,这个标志才有效
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 内容索引服务(content indexing service)不会对文件进行索引
FILE_ATTRIBUTE_OFFLINE 文件虽然存在,但文件内容已经被转移到脱机存储中
FILE_ATTRIBUTE_READONLY 文件只读
FILE_ATTRIBUTE_SYSTEM 文件是操作系统的一部分,专供操作系统使用
FILE_ATTRIBUTE_TEMPORARY 文件数据只会使用一小段时间。为了将访问时间降至最低,会尽量将文件数据保存在内存中



hTemplateFile
具有 GENERIC_READ 访问权限的模板文件的有效句柄。模板文件为正在创建的文件提供文件属性和扩展属性。该参数可以是NULL。

返回值
如果函数成功,则返回值的是指定文件、设备、命名管道或邮件插槽的句柄;
如果函数失败,则返回值为 INVALID_HANDLE_VALUE。 要获得扩展的错误信息,请调用GetLastError。

备注
CreateFile 最初是专门为文件交互而开发的,但后来被扩展和增强,以包括Windows开发人员可用的大多数其他类型的 I/O 设备和机制。

5、CloseHandle 函数

简介:
关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等等。
在 CreateThread 成功之后会返回一个 hThread 的线程句柄,且内核对象的计数加1,CloseHandle之后,引用计数减1,当变为0时,系统删除该内核对象。
若在线程执行完之后,没有调用CloseHandle,在进程执行期间,将会造成内核对象的泄露,相当于句柄泄露,但不同于内存泄露,这势必会对系统的效率带来一定程度上的负面影响。但当进程结束退出后,系统会自动清理这些资源。

语法格式:

 

1 BOOL CloseHandle(
2   HANDLE hObject
3 );

 

参数:
hObject:代表一个已经打开的对象句柄,例如:文件句柄,线程句柄,进程句柄等。

返回值:
TRUE:执行成功;
FALSE:执行失败,可以调用 GetLastError() 获得具体的执行失败原因。

 6、GetFileSize 函数

 简介:该函数用于获取指定文件的大小(长度),以字节为单位!

函数声明:

1 DWORD GetFileSize(
2   HANDLE  hFile,
3   LPDWORD lpFileSizeHigh
4 );
参数:
hFile:待获取大小的文件句柄,该文件句柄必须具有 GENERIC_READ 或 GENERIC_WRITE 访问权限。

lpFileSizeHigh:指向一个 DWORD 变量的指针,该变量用于接收文件大小高端(第32-63位)部分的值。若不需获取这部分的值,该参数可以为 NULL 。

返回值:
如果函数调用成功,返回值为文件大小的低端(第0-31位)的值,如果 lpFileSizeHigh 参数不为 NULL ,该参数对应的变量包含文件大小的高端(第32-63位)部分的值。
如果函数调用失败,并且 lpFileSizeHigh 参数为 NULL ,则返回值为 INVALID_FILE_SIZE 。要获取更多错误信息,请调用 GetLastError 函数。
如果函数调用失败,并且 lpFileSizeHigh 参数不为 NULL ,返回值为 INVALID_FILE_SIZE ,调用 GetLastError 函数返回的错误代码为 NO_ERROR 以外的值。
 
 7、GetFileSizeEx 函数
简介:
和 GetFileSize 函数的功能基本一致,该函数也是用于获取指定文件的大小(长度),以字节为单位!

函数声明:
1 BOOL GetFileSizeEx(
2   HANDLE         hFile,
3   PLARGE_INTEGER lpFileSize
4 );

参数:lpFileSize: 输出参数,指向储存文件大小的一个 LARGE_INTEGER 联合体。

 1 #if defined(MIDL_PASS)
 2 typedef struct _LARGE_INTEGER {
 3 #else // MIDL_PASS
 4 typedef union _LARGE_INTEGER {
 5     struct {
 6         DWORD LowPart;
 7         LONG HighPart;
 8     } DUMMYSTRUCTNAME;
 9     struct {
10         DWORD LowPart;
11         LONG HighPart;
12     } u;
13 #endif //MIDL_PASS
14     LONGLONG QuadPart;
15 } LARGE_INTEGER;

LARGE_INTEGER 大整数结构体的解析 头文件“WinNT.h”

定义如下

 1 #if defined(MIDL_PASS)
 2 typedef struct _LARGE_INTEGER {
 3 #else // MIDL_PASS
 4 typedef union _LARGE_INTEGER {
 5     struct {
 6         DWORD LowPart;
 7         LONG HighPart;
 8     } DUMMYSTRUCTNAME;
 9     struct {
10         DWORD LowPart;
11         LONG HighPart;
12     } u;
13 #endif //MIDL_PASS
14     LONGLONG QuadPart;
15 } LARGE_INTEGER;

解释:根据预编译指令若定义宏 MIDL_PASS,则将 结构体命名为 LARGE_INTEGER,若未定义宏 MIDL_PASS,则将联合体命名为 LARGE_INTEGER。
实际上如果编译器具有内置支持64位整数,使用 QuadPart 成员中存储的64位整数。否则,使用 LowPart 和 HighPart 成员的存储的64位整数。

在不支持内置64位情况下,即,采用联合体结构。联合体有两部分组成,DUMMYSTRUCTNAME 和 u:因为联合的长度取决于最长的数据成员的长度,相当于成员公用内存。

①、在小端的情况下,因为低32位数字在前,高32位在后:

如果将这个64位大整数赋值 0x1234:

1 LARGE_INTEGER data;
2 data.LowPart = 0x34;
3 data.HighPart = 0x12;

②、在大端的情况下,高32位数字在前,低32位在后:
如果将这个64位大整数赋值 0x1234:

1 LARGE_INTEGER data;
2 data.u.LowPart = 0x34;
3 data.u.HighPart = 0x12;

8、WriteFile 函数

简介:
从文件指针指向的位置开始将数据写入到一个文件中, 且支持同步和异步操作。
如果文件打开方式没有指明 FILE_FLAG_OVERLAPPED,当程序调用成功时,它将实际写入文件的字节数保存到 lpNumberOfBytesWriten 指明的地址空间中。
如果文件要交互使用的话,当函数调用完毕时要记得调整文件指针。

声明:

1 BOOL WriteFile(
2   HANDLE       hFile,
3   LPCVOID      lpBuffer,
4   DWORD        nNumberOfBytesToWrite,
5   LPDWORD      lpNumberOfBytesWritten,
6   LPOVERLAPPED lpOverlapped
7 );

参数说明:
hFile:需要写入数据的已打开的文件句柄,这个句柄所关联的文件必须拥有 GENERIC_WRITE 访问权限属性的文件;
lpBuffer:要写入到文件的缓冲区首地址;
nNumberOfBytesToWrite:要写入数据的字节数量。如写入零字节,表示什么都不写入,但会更新文件的“上一次修改时间”;
lpNumberOfBytesWritten:实际写入文件的字节数量,此变量是用来返回的 ;
lpOverlapped:倘若在指定 FILE_FLAG_OVERLAPPED 标志的前提下打开文件,指针不能为空,这个参数就必须引用一个特殊的结构。那个结构定义了一次异步写操作。否则,该参数应置为空;

返回值:
函数执行成功,返回TRUE,否则返回FALSE,更多错误信息还请调用 GetLastError 获取错误码。

9、ReadFile 函数

简介:
从文件指针指向的位置开始将文件数据读入内存中, 且支持同步和异步操作。
如果文件打开方式没有指明 FILE_FLAG_OVERLAPPED 的话,当程序调用成功时,它将实际读出文件的字节数保存到 lpNumberOfBytesRead 指明的地址空间中。
从文件中读出数据,与 C语言的 fread函数相比,这个函数要灵活的多,适用的场景也很多。该函数能够操作通信设备、管道、套接字以及邮槽。

声明:

1 BOOL ReadFile (
2     HANDLE hFile,
3     LPVOID lpBuffer,
4     DWORD nNumberOfBytesToRead,
5     LPDWORD lpNumberOfBytesRead,
6     LPOVERLAPPED lpOverlapped
7 );
参数:
hFile:需要读入数据的文件指针,这个指针指向的文件必须是 GENERIC_READ 访问属性的文件;
lpBuffer:接收读入文件数据的缓冲区;
nNumberOfBytesToRead:指定要读取的字节数;
lpNumberOfBytesRead:指向一个DWORD类型变量的指针,用来接收实际读取的字节数(实际读取的字节数很可能比要读取的字节数小);
lpOverlapped:OVERLAPPED 结构体指针,如果文件是以 FILE_FLAG_OVERLAPPED 方式打开的话,那么这个指针就不能为 NULL。FILE_FLAG_OVERLAPPED 允许对文件进行重叠操作,或者说异步操作,以后会讲解到。

返回值:
函数调用成功,返回TRUE,
调用失败,返回FALSE,如果要获得更多的错误信息,请调用 GetLastError 函数。
 
10、SetFilePointer 函数
简介:
使用 SetFilePointer 函数设置文件当前的读写位置。
声明:
1 DWORD SetFilePointer(
2   HANDLE hFile,
3   LONG   lDistanceToMove,
4   PLONG  lpDistanceToMoveHigh,
5   DWORD  dwMoveMethod
6 );

参数:
hFile:已打开的文件句柄,必须拥有 GENERIC_READ 或者 GENERIC_WRITE 访问权限;
lDistanceToMove:低32位的有符号的(有负有正)的值,指定要移动文件指针的字节数。如果lpDistanceToMoveHigh不为NULL,则lpDistanceToMoveHigh和lDistanceToMove将形成一个指定要移动的距离的单个64位有符号值。 如果lpDistanceToMoveHigh为NULL,则lDistanceToMove是一个32位有符号值。 lDistanceToMove的正值在文件中向前移动文件指针,负值则向后移动文件指针。
lpDistanceToMoveHigh:指向要移动的有符号64位距离的高32位。 如果你不需要高位的32位,这个指针必须设置为NULL。 当非NULL时,该参数还接收文件指针新值的高位DWORD。 
dwMoveMethod:设置文件指针的移动起点的位置:FILE_BEGIN=>从文件头开始往后移动,FILE_CURRENT=>从文件的当前指针位置开始移动,FILE_END=>从文件尾部开始往前移动。

返回值:
如果SetFilePointer函数成功并且lpDistanceToMoveHigh为NULL,则返回值是新文件指针的低位DWORD。 如果lpDistanceToMoveHigh不为NULL,则函数返回新文件指针的低位DWORD,并将新文件指针的高位DWORD放入该参数指向的LONG中。
如果函数失败并且lpDistanceToMoveHigh为NULL,则返回值为INVALID_SET_FILE_POINTER。 要获得扩展的错误信息,请调用GetLastError。
如果函数失败,并且lpDistanceToMoveHigh非空,则返回值为INVALID_SET_FILE_POINTER。 但是,由于INVALID_SET_FILE_POINTER是新文件指针的低位DWORD的有效值,因此必须检查GetLastError以确定是否发生错误。 如果发生错误,GetLastError返回非NO_ERROR值。
如果新文件指针的值为负值,则函数失败,文件指针不移动,GetLastError返回的代码为ERROR_NEGATIVE_SEEK。

11、SetFilePointerEx 函数

简介:
使用 SetFilePointerEx 函数设置文件当前的读写位置。

声明:

 

1 BOOL SetFilePointerEx(
2         HANDLE    hFile,
3         LARGE_INTEGER    liDistanceToMove,
4         PLARGE_INTEGER    pliNewFilePointer,
5         DWORD    dwMoveMethod
6 );

 

参数:
hFile:已打开的文件句柄,必须拥有 GENERIC_READ 或者 GENERIC_WRITE 访问权限;
liDistanceToMove:标识文件指针要移动多少个字节;
pliNewFilePointer:系统会在pliNewFilePointer参数指向的 LARGE_INTEGER 结构体中保存文件指针的新值;
dwMoveMethod:标识移动文件指针的三种方式,FILE_BEGIN、FILE_CURRENT、FILE_END,解释详见:SetFilePointer 函数说明:https://www.cctry.com/thread-298383-1-1.html

返回值:
函数执行成功返回TRUE,函数执行失败返回FALSE,获得更多错误信息请调用:GetLastError

12、 CreateDirectory 函数

简介:
CreateDirectory 函数创建一个新的单一层级的目录。 如果底层文件系统支持文件和目录的安全性,则该函数将指定的安全描述符应用于新目录。
如需自动建立多层级目录请使用:MakeSureDirectoryPathExists 函数。

声明:

 

1 BOOL CreateDirectory(
2   LPCTSTR lpPathName,
3   LPSECURITY_ATTRIBUTES lpSecurityAttributes
4 );

 

参数:
lpPathName:指向一个以空字符结尾的字符串,指定要创建的目录的路径。
lpSecurityAttributes:指向SECURITY_ATTRIBUTES结构的指针。 该结构的lpSecurityDescriptor成员为新目录指定安全描述符。 如果lpSecurityAttributes为NULL,则该目录将获取默认的安全描述符。 目标文件系统必须支持文件和目录的安全性才能使此参数有效。

返回值:
如果函数成功,返回值为TRUE。
如果函数失败,返回值为FALSE。 要获得更多的错误信息,请调用GetLastError。

 

13、RemoveDirectory 函数

简介:
RemoveDirectory 函数删除一个现有的不包含任何文件的空目录。要删除非空目录请调用:SHFileOperation

声明:

 

1 BOOL RemoveDirectory(
2   LPCTSTR lpPathName
3 );

 

参数:
lpPathName:指向一个以空字符结尾的字符串,指定要删除的目录的路径。 路径必须指定一个空目录,并且调用进程必须具有对目录的删除访问权限。

返回值:
如果函数成功,返回值为TRUE。
如果函数失败,返回值为FALSE。 要获得更多的错误信息,请调用GetLastError。

 

14、FindFirstFile 函数

简介:
根据文件名查找文件。该函数到一个文件夹(包括子文件夹)去搜索指定文件,如果要使用附加属性去搜索文件的话 可以使用FindFirstFileEx函数。

声明:

 

1 HANDLE FindFirstFile(
2   LPCTSTR             lpFileName,
3   LPWIN32_FIND_DATA lpFindFileData
4 );

 

 

 

参数:
lpFileName:要搜索的文件名,支持通配符:
C:\Windows\*.* //在C:\Windows目录中查找所有文件;
C:\Windows\System32\*.dll //在 C:\Windows\System32 目录中查找所有dll类型的文件;
C:\Windows\System.ini //在 C:\Windows 目录中查找 System.ini 文件;
C:\Windows\a???.* //在 C:\Windows 目录中查找所有以a开头的文件名长度为4个字符的文件;
Test.dat //在当前目录查找 Test.dat 文件
*.* //在当前目录查找所有文件

lpFindFileData:WIN32_FIND_DATA 类型,该结构用于装载与找到的文件有关的信息。该结构可用于后续的遍历与搜索。

结构 WIN32_FIND_DATA 的成员变量里包含了以上文件的各种属性:
结构的内容如下:

 1 typedef struct _WIN32_FIND_DATA
 2 {
 3         DWORD dwFileAttributes;                //文件属性
 4         FILETIME ftCreationTime;                //文件创建时间
 5         FILETIME ftLastAccessTime;                //文件最后一次访问时间
 6         FILETIME ftLastWriteTime;                //文件最后一次修改时间
 7         DWORD nFileSizeHigh;                        //文件长度高32位
 8         DWORD nFileSizeLow;                        //文件长度低32位
 9         DWORD dwReserved0;                        //系统保留
10         DWORD dwReserved1;                        //系统保留
11         TCHAR cFileName[MAX_PATH];        //长文件名
12         TCHAR cAlternateFileName[14];        //8.3格式文件名
13 } WIN32_FIND_DATA, *PWIN32_FIND_DATA;

在使用这个结构时不能手工修改这个结构中的任何数据,结构对于开发人员来说只能作为一个只读数据,其所有的成员变量都会由系统完成填写。

返回值:
如果函数成功,返回一个 HANDLE 类型的文件搜索句柄,搜索/遍历完成后,应用 FindClose 函数关闭这个句柄;
如果函数失败,返回值为 INVALID_HANDLE_VALUE。 要获得更多的错误信息,请调用GetLastError。

 

15、FindNextFile 函数

简介:
可以用来遍历目录或文件,判断当前目录下是否有下一个目录或文件。

声明:

 

1 BOOL FindNextFile(
2   HANDLE             hFindFile,
3   LPWIN32_FIND_DATA lpFindFileData
4 );

 

参数:
hFindFile:上一次查找返回的搜索文件句柄
lpFindFileData:WIN32_FIND_DATA 类型,该结构用于装载与找到的文件有关的信息。该结构可用于后续的遍历与搜索。

结构 WIN32_FIND_DATA 的成员变量里包含了以上文件的各种属性:

返回值:
如果函数成功,返回值为 TRUE;
如果函数失败,返回值为 FALSE,如果不再有与指定条件相符的文件,调用 GetLastError 会返回 ERROR_NO_MORE_FILES 错误码,要获得更多的错误信息,请调用GetLastError。

 

 

 

posted @ 2020-07-31 10:48  SALTED____FISH  阅读(417)  评论(0)    收藏  举报