C++文件相关函数CreateFileReadFileWriteFile用法详解
在C++中,文件操作是一个非常常见的功能,为了方便地进行文件的创建、读取和写入等操作,C++提供了一些文件操作相关的函数,本文将详细介绍C++中的CreateFile、ReadFile和WriteFile这三个文件操作函数的用法。
CreateFile函数
CreateFile函数用于创建或打开一个现有的文件,其原型如下:
HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile );
参数说明:
lpFileName:要创建或打开的文件的名称。
dwDesiredAccess:指定要请求的访问权限,可以是以下值的组合:GENERIC_READ(只读)、GENERIC_WRITE(可写)、GENERIC_EXECUTE(可执行)、DELETE(删除文件)、READ_CONTROL(读控制)、WRITE_DAC(写访问控制)、SYNCHRONIZE(同步)和STANDARD_RIGHTS_REQUIRED(标准权限)。
dwShareMode:指定其他进程对文件的共享模式,可以是以下值的组合:FILE_SHARE_READ(读共享)、FILE_SHARE_WRITE(写共享)、FILE_SHARE_DELETE(删除共享)和0(不共享)。
lpSecurityAttributes:指向一个SECURITY_ATTRIBUTES结构的指针,该结构指定了新文件的安全属性,如果为NULL,则使用默认的安全属性。
dwCreationDisposition:指定如何创建文件,可以是以下值的组合:CREATE_NEW(创建新文件)、CREATE_ALWAYS(总是创建新文件)、OPEN_EXISTING(打开现有文件)、OPEN_ALWAYS(总是打开现有文件)、TRUNCATE_EXISTING(截断现有文件)和CREATE_NORMAL(创建普通文件)。
dwFlagsAndAttributes:指定文件的标志和属性,通常设置为0。
hTemplateFile:可选参数,如果指定了该参数,CreateFile函数将尝试使用该模板文件的属性来创建新文件,如果该参数为NULL,则使用默认的属性。
返回值:如果函数成功,返回一个有效的句柄;如果函数失败,返回INVALID_HANDLE_VALUE,要获取更多的错误信息,可以调用GetLastError函数。
ReadFile函数
ReadFile函数用于从已打开的文件中读取数据,其原型如下:
BOOL ReadFile( HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped );
参数说明:
hFile:要读取数据的文件的句柄,由CreateFile或OpenFile函数返回。
lpBuffer:指向接收读取数据的缓冲区的指针。
nNumberOfBytesToRead:要读取的数据的字节数。
lpNumberOfBytesRead:指向一个变量的指针,该变量接收实际读取的字节数,如果该参数为NULL,则忽略此参数。
lpOverlapped:指向一个OVERLAPPED结构的指针,该结构指定了异步操作的相关信息,如果为NULL,则同步执行ReadFile函数。
返回值:如果函数成功,返回非零值;如果函数失败,返回零,要获取更多的错误信息,可以调用GetLastError函数。
WriteFile函数
WriteFile函数用于向已打开的文件中写入数据,其原型如下:
BOOL WriteFile( HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped );
参数说明:
hFile:要写入数据的文件的句柄,由CreateFile或OpenFile函数返回。
lpBuffer:指向要写入数据的缓冲区的指针。
nNumberOfBytesToWrite:要写入的数据的字节数。
lpNumberOfBytesWritten:指向一个变量的指针,该变量接收实际写入的字节数,如果该参数为NULL,则忽略此参数,注意,这个参数实际上是用来返回实际写入的字节数的,而不是用来限制写入字节数的,即使传入了一个较小的字节数,WriteFile也可能会写入更多的字节,如果传入了一个较大的字节数,WriteFile将不会写入超过该字节数的数据。
lpOverlapped:指向一个OVERLAPPED结构的指针,该结构指定了异步操作的相关信息,如果为NULL,则同步执行WriteFile函数,与ReadFile类似,这里也可以传入一个OVERLAPPED结构来实现异步操作,需要注意的是,WriteFile和ReadFile不能同时进行异步操作,如果两个函数都使用了OVERLAPPED结构并且同时进行了异步操作,那么其中一个函数的操作将会被挂起,直到另一个函数完成操作,这可能会导致程序无法正确地读取或写入数据,在使用这两个函数时,需要确保它们之间没有冲突。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/171793.html