你的位置:Unification中文网 > SHIB中文网 >
C++文件相关函数CreateFile|ReadFile|WriteFile用法详解
发布日期:2025-01-03 17:40 点击次数:185
一、CreateFile
1.1 函数原型
CreateFile 函数是 Windows API 中用于创建文件、目录、管道、控制台输入/输出缓冲区或远程 IO 设备的函数。它位于 <windows.h> 头文件中,函数原型如下:
1.2 函数参数介绍
CreateFile 函数的参数说明如下:
lpFileName:指定文件名的字符串指针。
dwDesiredAccess:指定文件的访问模式。可以是下列值之一:
GENERIC_READ:可以读取文件。GENERIC_WRITE:可以写入文件。GENERIC_EXECUTE:可以执行文件。
dwShareMode:指定文件的共享模式。可以是下列值之一:
FILE_SHARE_READ:允许其他进程读取文件。FILE_SHARE_WRITE:允许其他进程写入文件。FILE_SHARE_DELETE:允许其他进程删除文件。
lpSecurityAttributes:指定文件的安全属性。如果设为 NULL,则使用默认安全描述符。
dwCreationDisposition:指定如何创建文件。可以是下列值之一:
CREATE_NEW:如果文件不存在,则创建新文件;否则,返回 ERROR_FILE_EXISTS 错误。TRUNCATE_EXISTING:如果文件存在,则截断文件;否则,返回 ERROR_FILE_NOT_FOUND 错误。
dwFlagsAndAttributes:指定文件的属性。可以是下列值之一:
FILE_ATTRIBUTE_NORMAL:普通文件。FILE_ATTRIBUTE_READONLY:只读文件。FILE_ATTRIBUTE_HIDDEN:隐藏文件。FILE_ATTRIBUTE_SYSTEM:系统文件。
hTemplateFile:指定用于创建文件的模板文件句柄。如果没有模板文件,则设为 NULL。
如果 CreateFile 函数调用成功,则返回一个文件句柄;如果调用失败,则返回一个特殊的值 INVALID_HANDLE_VALUE,并可以使用 GetLastError 函数获取错误代码。
1.3 示例代码
二、ReadFile
2.1 函数原型
在 C++ 中,可以使用 ReadFile 函数从文件中读取数据。这个函数位于 <windows.h> 头文件中,并且需要提供文件句柄、缓冲区地址和要读取的字节数。
ReadFile 函数的函数原型如下:
2.2 函数参数介绍
ReadFile 函数的参数说明如下:
hFile:指定要读取的文件的句柄。
lpBuffer:指向存储读取数据的缓冲区的指针。
nNumberOfBytesToRead:指定要读取的字节数。
lpNumberOfBytesRead:指向一个变量的指针,用于返回实际读取的字节数。
lpOverlapped:指定用于异步 I/O 的数据结构的指针。如果不使用异步 I/O,则设为 NULL。
在使用完文件后,应调用 CloseHandle 函数来关闭文件句柄,以释放系统资源。
2.3 示例代码
在这个例子中,我们打开了一个名为 test.txt 的文件,并以读取模式打开了它。然后,我们调用 ReadFile 函数读取文件中的数据,并将其存储在缓冲区中。注意,ReadFile 函数的第四个参数是一个输出参数,用于返回实际读取的字节数。如果调用失败,则函数返回 FALSE 并可以使用 GetLastError 函数获取错误代码。
三、WriteFile
在 C++ 中,可以使用 WriteFile 函数向文件中写入数据。这个函数位于 <windows.h> 头文件中,并且需要提供文件句柄、缓冲区地址和要写入的字节数。
3.1 函数原型
3.2 函数参数
WriteFile 函数的参数说明如下:
hFile:指定要写入的文件的句柄。
lpBuffer:指向包含要写入的数据的缓冲区的指针。
nNumberOfBytesToWrite:指定要写入的字节数。
lpNumberOfBytesWritten:指向一个变量的指针,用于返回实际写入的字节数。
lpOverlapped:指定用于异步 I/O 的数据结构的指针。如果不使用异步 I/O,则设为 NULL。
在使用完文件后,应调用 CloseHandle 函数来关闭文件句柄,以释放系统资源。
3.3 示例代码
下面是一个简单的例子,展示了如何使用 WriteFile 函数向文件中写入数据:
在这个例子中,我们打开了一个名为 test.txt 的文件,并以写入模式打开了它。然后,我们调用 WriteFile 函数向文件中写入数据,并将数据存储在缓冲区中。
注意,WriteFile 函数的第四个参数是一个输出参数,用于返回实际写入的字节数。如果调用失败,则函数返回 FALSE 并可以使用 GetLastError 函数获取错误代码。
四、三个api一起用示例代码
提示
另外,windows api读取出来的字符是宽字节,某些情况下与C++标准输出可能不一致,这方面在字符加密、流化等操作上会出现问题,所以如果有兼容要求建议使用C++标准输入、输出。
如果要写入文本文件,可以使用 C++ 标准库中的 fstream 头文件中的流类型,例如 ofstream 和 wofstream。这些类型提供了较为方便的写入接口,可以直接使用运算符 << 写入数据。下面是一个示例代码,展示了如何使用 ofstream 类写入文本文件:
在这个例子中,我们打开了一个名为 test.txt 的文件,并使用运算符 << 向文件中写入了一行字符串。在使用完文件后,我们调用了 close 方法来关闭文件。
注意,如果要写入 Unicode 字符串,可以使用 wofstream 类。
最后,需要注意,在 Windows 系统中,文件名是区分大小写的。因此,在打开文件时,需要确保文件名正确。
以上就是C++文件相关函数CreateFile|ReadFile|WriteFile用法详解的详细内容,更多关于C++文件函数的资料请关注脚本之家其它相关文章!
上一篇:没有了