C++文件相关函数CreateFileReadFileWriteFile怎么使用
更新时间:2023-10-26前言
C++的文件操作函数CreateFile、ReadFile和WriteFile是Windows API中提供的函数,用于进行文件的创建、读取和写入操作。这些函数提供了一种低级的文件操作方式,可以直接对文件进行读写操作而不需要使用C++语言提供的文件流操作方式。下面将分别介绍这三个函数的使用方法。使用CreateFile函数创建文件
CreateFile函数用于创建或打开一个文件,并返回一个文件句柄,该句柄可以用于后续的文件操作。
HANDLE hFile = CreateFile( LPCTSTR lpFileName, // 文件名 DWORD dwDesiredAccess, // 访问权限 DWORD dwShareMode, // 共享模式 LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 安全属性 DWORD dwCreationDisposition, // 创建方式 DWORD dwFlagsAndAttributes, // 文件属性 HANDLE hTemplateFile // 文件模板句柄 );
其中,lpFileName是要创建或打开的文件名,dwDesiredAccess是对文件的访问权限(如GENERIC_READ表示只读,GENERIC_WRITE表示只写),dwShareMode是共享模式(如FILE_SHARE_READ表示可共享读访问),dwCreationDisposition是文件的创建方式(如CREATE_NEW表示创建新文件,CREATE_ALWAYS表示创建新文件或覆盖现有文件),dwFlagsAndAttributes是文件的属性(如FILE_ATTRIBUTE_NORMAL表示普通文件),hTemplateFile是文件模板句柄。
使用ReadFile函数读取文件内容
ReadFile函数用于从已打开的文件中读取数据。
BOOL ReadFile( HANDLE hFile, // 文件句柄 LPVOID lpBuffer, // 数据缓冲区 DWORD nNumberOfBytesToRead, // 要读取的字节数 LPDWORD lpNumberOfBytesRead, // 实际读取的字节数 LPOVERLAPPED lpOverlapped // 重叠结构体指针,用于异步操作,一般传入NULL );
其中,hFile为要读取的文件句柄,lpBuffer为用于接收读取数据的缓冲区指针,nNumberOfBytesToRead为要读取的字节数。ReadFile函数会将读取的字节数写入lpNumberOfBytesRead指向的变量中,如果读取成功返回TRUE,否则返回FALSE。
使用WriteFile函数写入文件内容
WriteFile函数用于将数据写入已打开的文件中。
BOOL WriteFile( HANDLE hFile, // 文件句柄 LPCVOID lpBuffer, // 数据缓冲区 DWORD nNumberOfBytesToWrite, // 要写入的字节数 LPDWORD lpNumberOfBytesWritten, // 实际写入的字节数 LPOVERLAPPED lpOverlapped // 重叠结构体指针,用于异步操作,一般传入NULL );
其中,hFile为要写入的文件句柄,lpBuffer为要写入的数据缓冲区指针,nNumberOfBytesToWrite为要写入的字节数。WriteFile函数会将实际写入的字节数写入lpNumberOfBytesWritten指向的变量中,如果写入成功返回TRUE,否则返回FALSE。
总结
通过CreateFile函数可以创建或打开文件并获取文件句柄,接着可以使用ReadFile和WriteFile函数对文件进行读写操作。这些函数的使用可以实现对文件的底层操作,但需要注意使用正确的访问权限、共享模式和文件属性。同时,在使用ReadFile和WriteFile函数时,需要注意字节数的指定以及读写操作是否成功。