当前位置: 首页 > news >正文

WIN--文件读写

创建/打开文件:CreateFile

CreateFile这个API是文件读写的核心下面我们来看看他的使用方式

HANDLE CreateFileA([in]           LPCSTR                lpFileName,[in]           DWORD                 dwDesiredAccess,[in]           DWORD                 dwShareMode,[in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,[in]           DWORD                 dwCreationDisposition,[in]           DWORD                 dwFlagsAndAttributes,[in, optional] HANDLE                hTemplateFile
);

第一个参数 如果我们想要创建或者打开的是一个文件那么这里就写文件的路径 如果是其他IO设备就写设备名

第二个参数 是请求对文件或设备的访问权限 可以为GENERIC_READ(只读),GENERIC_WRITE(只写)或者GENERIC_ALL(可读可写)

第三个参数 请求的文件或设备的共享模式(其他进程对该文件权限)我们通常写为FILE_SHARE_READ(其他进程可读)

第四个参数 我们通常写为NULL

*第五个参数(重点) 对存在或不存在的文件或设备执行的操作  下面为这个参数的不同情况

CREATE_ALWAYS

2

始终创建新文件。

如果指定的文件存在且可写,则函数将截断文件、函数成功,最后错误代码设置为 ERROR_ALREADY_EXISTS(183)。

如果指定的文件不存在且路径有效,则会创建一个新文件,该函数会成功,最后一个错误代码设置为零。

有关详细信息,请参阅本主题的“备注”部分。

CREATE_NEW

1

仅当该文件尚不存在时,才会创建一个新文件。

如果指定的文件存在,函数将失败,最后一个错误代码设置为 ERROR_FILE_EXISTS(80)。

如果指定的文件不存在,并且是可写位置的有效路径,则会创建一个新文件。

OPEN_ALWAYS

4

始终打开文件。

如果指定文件存在,则函数成功,最后一个错误代码设置为 ERROR_ALREADY_EXISTS(183)。

如果指定的文件不存在并且是可写位置的有效路径,该函数将创建一个文件,最后一个错误代码设置为零。

OPEN_EXISTING

3

仅当文件或设备存在时才打开该文件或设备。

如果指定的文件或设备不存在,该函数将失败,最后一个错误代码设置为 ERROR_FILE_NOT_FOUND(2)。

有关设备的详细信息,请参阅“备注”部分。

TRUNCATE_EXISTING

5

打开一个文件并截断它,使其大小为零字节,仅当它存在时。

如果指定的文件不存在,该函数将失败,最后一个错误代码设置为 ERROR_FILE_NOT_FOUND(2)。

调用过程必须打开文件,并将 GENERIC_WRITE 位设置为 dwDesiredAccess 参数的一部分。

第六个参数 我们通常写为FILE_ATTRIBUTE_NORMAL即可

第七个参数 通常写为NULL

注意:如果CreatFile这个函数调用失败返回值为INVALID_HANDLE_VALUE 成功为当前操作的文件或者IO设备的句柄  打开了记得要关闭

总结:CreateFile这个API可以打开一个文件或IO设备也可以创建一个文件或者IO设备 具体的操作由参数来决定

//创建一个文件HANDLE hFile = CreateFileA("C:\\Users\\20622\\Desktop\\zhao.txt",GENERIC_ALL,                //给予文件的权限FILE_SHARE_READ,            //其他进程可对该文件进行的操作NULL,CREATE_ALWAYS,              //打开方式FILE_ATTRIBUTE_NORMAL,      //通常就为FILE_ATTRIBUTE_NORMALNULL);if (hFile == INVALID_HANDLE_VALUE){cout << GetLastError();return 0;}CloseHandle(hFile);

向文件中写入WriteFile

char buffer[] = "FUCK YOU \r\n HA HA HA HA";
WriteFile(hFile, buffer, sizeof(buffer), NULL, NULL);

从文件中读取

注意读取的时候我们要修改一下CreateFile的参数CREATE_ALWAYS改为OPEN_EXISTING

我们在获取文件的大小的时候要调用API:GetFileSize--第一个参数为你要获取文件的句柄第二个参数填NULL即可

DWORD dwFileSize = GetFileSize(hFile, NULL);
PCHAR FileBuffer = new char[dwFileSize];
memset(FileBuffer, 0, dwFileSize);
ReadFile(hFile, FileBuffer, dwFileSize, NULL, NULL);
http://www.xdnf.cn/news/652267.html

相关文章:

  • Linux的top命令使用
  • 在前端项目中实现打包后可配置地址(如 API 域名、静态资源路径等)
  • 告别复杂操作!链抽象如何让 Web3 用户体验媲美 Web2?
  • Element UI 对话框固定宽度 + 遮罩层深度定制方案
  • 零基础设计模式——结构型模式 - 适配器模式
  • 基于 docker 部署 k8s 集群
  • 机器学习中的线性回归:从理论到实践的深度解析
  • 运行comfyui Wan2.1 文生视频工作流,问题总结
  • vue3+vite项目中使用Tailwind CSS
  • 鸿蒙OSUniApp 制作个性化的评分星级组件#三方框架 #Uniapp
  • 力扣刷题Day 56:岛屿数量(200)
  • 多线程(5)——单例模式,阻塞队列
  • C++多态与虚函数
  • UR10e 机器人如何通过扭矩控制接口实现高效装配
  • window 显示驱动开发-呈现开销改进
  • 如何在 Django 中集成 MCP Server
  • Leetcode 3556. Sum of Largest Prime Substrings
  • TPAMI 2025 | CEM:使用因果效应图解释底层视觉模型
  • Hive 分区详解:从基础概念到实战应用
  • R 语言科研绘图 --- 热力图-汇总
  • Linux系统:动静态库的制作与安装
  • ollama list模型列表获取 接口代码
  • Python环境搭建
  • 220Vac 1kW 无刷直流电机驱动器硬件方案
  • Spring AI 之多模态
  • [BUG]Debian/Linux操作系统中 安装 curl等软件显示无候选安装(E: 软件包 curl 没有可安装候选)
  • 国芯思辰| SerDes芯片SCS5501/SCS5502助力汽车触屏流媒体后视镜,兼容MAX9295A/MAX96717
  • Oracle 的 TX、TM、UL 锁对比
  • 【后端高阶面经:MongoDB篇】40、怎么优化MongoDB的查询性能?
  • 001 dart刷题