文章目录
- 前言
- 一、文件的写操作WriteFile
- 1.WriteFile介绍
- 2.WriteFile实例
- 二、文件的读操作ReadFile
- 1.ReadFile简介
- 2.ReadFile实例
- 总结
前言
Windows程序设计9:文件的读写操作。
一、文件的写操作WriteFile
1.WriteFile介绍
从文件指针指向的位置开始,将数据写入到一个文件中,支持同步和异步操作。如果文件打开方式没有指明FILE_FLAG_OVERLAPPED,当程序调用成功时,它将实际写入文件的字节数保存到lpNumberOfBytesWritten指明的地址空间中。如果文件要交互使用的话,当函数调用完毕时要记得调整文件指针。函数原型为
BOOL WriteFile(HANDLE hFile, // 文件或设备的句柄LPCVOID lpBuffer, // 指向要写入的数据的缓冲区DWORD nNumberOfBytesToWrite,// 要写入的字节数LPDWORD lpNumberOfBytesWritten, // 实际写入的字节数LPOVERLAPPED lpOverlapped // 用于异步 I/O 的结构
);
参数HANDLE hFile为文件或设备的句柄,必须是通过 CreateFile 打开的句柄。该句柄必须具有 GENERIC_WRITE 访问权限。
参数LPCVOID lpBuffer为一个指向空类型的指针。指向要写入的数据的缓冲区。缓冲区的数据类型可以是任意类型(如 char*、BYTE* 等)
参数DWORD nNumberOfBytesToWrite为要写入的字节数。如果写入的数据量大于缓冲区大小,可能会导致访问冲突
参数LPDWORD lpNumberOfBytesWritten为指向一个 DWORD 变量的指针,用于接收实际写入的字节数。如果为 NULL,则忽略实际写入的字节数(仅适用于异步 I/O)。是一个传出的值。
参数LPOVERLAPPED lpOverlapped为指向 OVERLAPPED 结构的指针,用于异步 I/O 操作。如果为 NULL,则使用同步 I/O。
返回值:如果函数执行成功,返回 TRUE。如果失败,返回 FALSE。可以通过 GetLastError 获取错误码。
2.WriteFile实例
在D盘中新年快乐.txt文件内写入数据,起始为一个空的文件。
写入数字12345
HANDLE handle1 = CreateFile(_T("D:\\新年快乐.txt"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);if (handle1 != INVALID_HANDLE_VALUE) // 函数执行成功{// int num = 12345; // 写入的数据DWORD rw = 0; // 传出的实际写入大小BOOL bret = WriteFile(handle1, &num, sizeof(num), &rw, NULL);if (bret){MessageBox(NULL, _T("数据写入成功"), _T("提示"), MB_OK);}else{MessageBox(NULL, _T