c语言编程笔录

首页 >   > 笔记大全

笔记大全

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函数时,需要注意字节数的指定以及读写操作是否成功。