Windows系统编程(一) 文件与目录操作
以下程序需要包含<Windows.h>头文件
创建打开文件
HANDLE hFile = CreateFile("D:\\rkvir.ini", GENERIC_READ | GENERIC_WRITE, NULL, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
此处打开文件,参数依次 已有文件的路径,注意\\是转义字符 对文件操作的权限,此处是读写两种权限 共享模式,此处无共享状态 安全属性,一般写NULL 对存在或不存在文件进行的操作,此处是始终打开文件,如果没有该文件则创建一个新文件 文件属性,此处是常规属性 模板,一般填NNULL
if (INVALID_HANDLE_VALUE == hFile) 判断文件是否创建或打开成功,此处等号左边是一个宏,比对句柄是否是一个无效句柄
{
std::cout << "CreateFile Failed!" << std::endl;
}
CHAR * szBuffer[MAX_PATH] = { 0 }; 此处开始文件书写,申请一个缓存空间
memcpy(szBuffer, "Hello File", strlen("Hello File")); 在该缓存空间拷贝数据
DWORD dwNumberOfBytesWritten = 0; 记录该文件目前数据长度的变量
BOOL bRet = WriteFile(hFile, szBuffer, strlen("Hello File"), &dwNumberOfBytesWritten, NULL);
书写该文件并接收函数返回值 参数依次 文件句柄 指向缓冲区的指针 写入内容长度 记录目前已经
写了多少数据 异步读写结构一般填NULL
if (!bRet) 判断是否写入文件失败
{
std::cout << "WriteFile Failed!" << std::endl; 提示创建失败
std::cout << GetLastError() << std::endl; 显示文件创建失败的原因,打印的是数字,可以在工
具下错误查找中输入数字进行查找错因
}
CloseHandle(hFile); 关闭文件句柄
读取文件
HANDLE hFile = CreateFile("D:\\rkvir.ini", GENERIC_READ | GENERIC_WRITE, NULL, NULL,
OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE == hFile)
{
std::cout << "CreateFile Failed!" << std::endl; 显示创建失败
std::cout << GetLastError() << std::endl;
}
LARGE_INTEGER liFileSize; 设置一个接收文件大小的结构体,该结构体内存由两个32位大小
内存构成64位大小,原因是文件有32位和64位大小
if (!GetFileSizeEx(hFile, &liFileSize)) 获取文件大小,参数依次 文件句柄 接收文件大小结构体
的指针,成功返回1,否则0
{
std::cout << "GetFileSizeEx Failed!" << std::endl;
std::cout << GetLastError() << std::endl;
}
SetFilePointer(hFile, 2, NULL, FILE_BEGIN); 设置一个文件指针,参数依次 文件句柄,该句柄
具有读写权限 指针在文件中起始位置,也叫偏移量
高位内存,指针偏移超过低位内存时需要写,一般不会超过写NULL 指针要偏移时开始的位置
CHAR * szBuffer = new CHAR[liFileSize.LowPart + 1]; 创建一个读取信息的缓冲区,大小是该文件大小结构体32位的大小。要多申请一位,一位内存越界
memset(szBuffer, 0, liFileSize.LowPart + 1); 初始化缓冲区
DWORD lpNumberOfBytesRead; 设置记录文件目前数据长度的变量
BOOL bRet = ReadFile(hFile, szBuffer, liFileSize.LowPart, &lpNumberOfBytesRead, NULL); 读
取文件并接收函数返回值 参数依次 文件句柄 要读取文件的缓冲区指针 需要读取的文件范围数据
长度 实际读取文件的长度
if (!bRet) 判断是否读取失败
{
std::cout << "ReadFile Failed!" << std::endl;
std::cout << GetLastError() << std::endl;
}
std::cout << szBuffer << std::endl; 打印读取的内容,直到00结尾
CloseHandle(hFile);
移动文件
方式一:直接移动文件
MoveFile("D:\\Atest1\\rkvir.ini", "D:\\Atest2\\rkvir.ini"); 移动文件,参数依次 原文件所在路径 现件
所在路径 DeleteFile("D:\\Atest2\\rkvir.ini"); 此时删除文件
方式二:现有一个文件1在A文件夹中,在B文件夹中创建一个空白文件2,拷贝文件1到空白文件
2,完成移动
CopyFile("D:\\Atest1\\rkvir.ini", "D:\\Atest2\\rkvir.ini",TRUE);
参数3:参数为TURE时,如果要拷贝的文件已经存在同名文件,则文件创建失败。参数为FALSE
时,则覆盖已经存在的的同名文件
目录操作
CreateDirectory("D:\\Atest3", NULL); 参数依次 目录所在路径 一般填NULL
RemoveDirectory("D:\\Atest3"); 只能删除空目录
遍历仅有文件的目录下文件:
WIN32_FIND_DATA FindFileData; 设置一个用于装载与找到的文件有关
信息的结构体
HANDLE hFile = FindFirstFile("D:\\Atest1\\*", &FindFileData); 在特定目录下查找第一个文件,
参数依次 特定目录的路径,*表示该目录下所有东西 存储信息的结构体地址
if (INVALID_HANDLE_VALUE == hFile) 没有找到文件时操作
{
std::cout << "FindFirstFile Failed!" << std::endl;
std::cout << GetLastError() << std::endl;
}
do
{
std::cout << FindFileData.cFileName << std::endl; 输出查找到的文件名字,打印结果前两行
有点,这是表示上级路径和当前路径
SYSTEMTIME lpSystemTime; 该结构用于设置指定时间和日期,此处是一个系统时间
FileTimeToSystemTime(&FindFileData.ftCreationTime, &lpSystemTime); 将文件时间转化成
指定时间 参数依次 文件时间结构地址 指定时间结构地址
std::cout << lpSystemTime.wYear << " " << lpSystemTime.wMonth << std::endl; 打印文件的
时间年月
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)判断该目录下是否有有
子目录时,参数依次 目前文件属性 表示目录的句柄
{
std::cout << "DIRECTORY!" << std::endl;
}
} while (FindNextFile(hFile, &FindFileData));
指定获取某文件属性
HANDLE hFile = CreateFile("D:\\Atest1\\rkvir.ini", GENERIC_READ | GENERIC_WRITE, NULL,
NULL, OPEN_ALWAYS, FILE_ATT RIBUTE_NORMAL, NULL); 打开以文件,并接收文件句柄
BY_HANDLE_FILE_INFORMATION bhFileInfo; 创建一个结构用于存储文件信息
GetFileInformationByHandle(hFile, &bhFileInfo); 获取文件属性 参数依次 文件句柄 存储文件信
息的结构体地址
相关文章:
Windows系统编程(一) 文件与目录操作
以下程序需要包含<Windows.h>头文件 创建打开文件 HANDLE hFile CreateFile("D:\\rkvir.ini", GENERIC_READ | GENERIC_WRITE, NULL, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 此处打开文件,参数依次 已有文件的路径,注意…...
6-2、T型加减速计算简化【51单片机+L298N步进电机系列教程】
↑↑↑点击上方【目录】,查看本系列全部文章 摘要:本节介绍简化T型加减速计算过程,使其适用于单片机数据处理。简化内容包括浮点数转整型数计算、加减速对称处理、预处理计算 一、浮点数转整型数计算 根据上一节内容已知 常用的晶振大小…...
配置Jenkins自动构建打包项目
转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 需求说明 1、给A项目配置jenkins每2小时无条件自动构建一次,无论是否有代码提交。 2、给B项目配置jenkins每15分钟检…...
进阶C语言-通讯录的实现
通讯录 🎈1.设计要求🎈2.程序实现🔭2.1打印菜单及初始化通讯录🔭2.2显示所有联系人🔭2.3查找指定的联系人🔭2.4删除指定的联系人🔭2.5查找指定的联系人🔭2.6修改指定联系人🔭2.7按照年龄排序(以此为例)🎈3.全部源码以及实现🎈1.设计要求 🌞通过前面…...
STM32单片机的基本原理与应用(七)
超声波测距实验 基本原理 超声波测距实验是STM32单片机通过控制HC-SR04超声波模块,使其发送超声波,遇到物体反射回超声波来实现距离测量,其原理就是在发射超声波到接收超声波会有一段时间,而超声波在空气中传播的速度为声速&…...
LLM应用开发与落地:使用gradio十分钟搭建聊天UI
一、背景 如果你是做LLM应用开发的,特别是做后端开发,你一定会遇到怎么快速写一个聊天UI界面来调试prompt或agent的问题。这时候的你可能在苦恼中,毕竟react.js, next.js, css, html也不是每个人都那么熟练,对吧?即使…...
智慧城市:打造低碳未来,引领城市数字化转型新篇章
在“万物皆可数字化”的新时代浪潮下,智慧城市作为未来城市发展的先锋方向,正在以前所未有的速度和规模重塑我们的城市面貌。 智慧城市不仅是一个技术革新的标志,更是城市治理、民生服务等领域全面升级的重要引擎。 一、智慧城市的多元应用领…...
ChatGPT之制作短视频
引言 今天带来了如何使用 ChatGPT和剪映来制作简单的短视频教程,在这其中 ChatGPT的作用主要是帮我们生成文案,剪映的功能就是根据文案自动生成视频,并配上一些图片、动画、字幕和解说。 ChatGPT生成文案 首先,我们需要使用提示…...
k8s学习(RKE+k8s+rancher2.x)成长系列之简配版环境搭建(二)
三、简配版集群,适用于demo环境 1.集群架构设计 主机名角色配置(核数,内存,磁盘)MasterRKE,controlplane,etcd,worker,rancher-master2C 8G 40GSlaver1controlplane,worker,rancher-master2C 8G 40GSlaver2controlplane,worker,rancher-mas…...
智能优化算法 | Matlab实现合作优化算法(CSA)(内含完整源码)
文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 智能优化算法 | Matlab实现合作优化算法(CSA)(内含完整源码) 源码设计 clear clc close SearchAgents_no=30; % Number of search agents Max_iteration=1000;...
mysql如何备份某些库的某些表
MySQL备份数据库 mysql如何备份某些库的某些表 要备份某个库里的部分表,该如何操作? 例如:要备份db01库里的20张表,表很多又不想备份整个库 或者要备份多个库里的不同表,又如何操作? 例如:备份…...
C++类和对象入门(三)
顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 前言 在c中,类型分为两类,一类是内置类型,另一类是自定义类型。 1.内置类型…...
【0255】揭晓pg内核中MyBackendId的分配机制(后端进程Id,BackendId)(一)
文章目录 1. 前言2. MyBackendId分配机制2.1 全局变量MyBackendId2.2 共享缓存无效内存段(shared inval buffer)2.2.1 shmInvalBuffer缓冲区2.2.2 shmInvalBuffer初始化1. 前言 MyBackendId的数据类型是BackendId(backendid.h src/include/storage),它表示“当前活动的后…...
Python爬虫requests库详解
使用 requests 上一节中,我们了解了 urllib 的基本用法,但是其中确实有不方便的地方,比如处理网页验证和 Cookies 时,需要写 Opener 和 Handler 来处理。为了更加方便地实现这些操作,就有了更为强大的库 requests&…...
【漏洞复现】EPON上行A8-C政企网关信息泄露漏洞
Nx01 产品简介 EPON上行A8-C政企网关是一款终端产品,提供企业网络解决方案。 Nx02 漏洞描述 EPON上行A8-C政企网关敏感信息泄露漏洞,攻击者通过敏感信息泄露获取管理员密码。 Nx03 产品主页 fofa-query: "ZXECS" && title"Web…...
发送get请求并且发送请求头(header),java实现
发送get请求时,发送请求头(Header)中的内容 方便第二次调用其他url时传递参数,例如userCode或者租户编码 调用方式 Autowired private HttpServletRequest request;先注入HttpServletRequestpublic xxx xxx(){String url &quo…...
介绍docker
一:介绍docker: Docker 并没有单独的图形界面,它主要通过命令行来进行管理和操作 1、 docker ps:显示正在运行的容器。 docker images:显示本地的镜像。 docker run:创建并启动一个新容器。 docker stop&a…...
Web课程学习笔记--CSS盒模型
CSS 盒模型 盒模型 网页设计中常听的属性名:内容(content)、填充(padding)、边框(border)、边界(margin), CSS盒子模式都具备这些属性。 这些属性我们可以把它转移到我们日常生活中的盒子(箱子)上来理解,日常生活中所…...
中学一级教师是什么职称等级
在教育的世界里,每一个角色都肩负着不可或缺的使命。其中,中学一级教师这一职称,就如同武侠小说里的“隐藏高手”,不显山不露水,却拥有着举重若轻的实力。 中学一级教师究竟是个怎样的职称等级呢?今天&…...
2024年2月CCF-全国精英算法大赛题目
第一次参加这种比赛,虽然是c类赛事,但是是ccf主办的,难度还是有点的,主要是前面签到题主要是思想,后面的题目难度太高,身为力扣只刷了一百多道题目的我解决不了,这几道我只做了B,C题,E题超时了&…...
vue基于springboot的目的地旅游预订网站
目录同行可拿货,招校园代理 ,本人源头供货商功能模块划分技术实现要点扩展功能建议性能优化方向项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块划分 用户模块 用户注册与登录…...
GLM-OCR服务监控与运维指南:使用Prometheus与Grafana搭建看板
GLM-OCR服务监控与运维指南:使用Prometheus与Grafana搭建看板 想象一下,你负责的GLM-OCR服务正在线上稳定运行,突然接到业务方反馈,说图片识别接口响应变慢了。你第一反应是什么?是登录服务器看日志,还是去…...
让老旧Mac焕发新生:OpenCore Legacy Patcher完整指南
让老旧Mac焕发新生:OpenCore Legacy Patcher完整指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 您的Mac是否被苹果官方"抛弃"&…...
foobar2000界面美化终极指南:3步打造你的专属音乐播放器
foobar2000界面美化终极指南:3步打造你的专属音乐播放器 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn 还在为foobar2000那套单调乏味的默认界面感到困扰吗?今天我要为你介绍…...
Pixel Couplet Gen 生成效果对比分析:不同参数下的对联质量评估
Pixel Couplet Gen 生成效果对比分析:不同参数下的对联质量评估 1. 引言:当AI遇上传统对联 春节贴对联是中国延续千年的文化传统,但创作一副既工整又有新意的对联并非易事。Pixel Couplet Gen作为一款AI对联生成工具,通过调整Te…...
ComfyUI-FramePackWrapper功能选择指南:如何根据资源控制与使用便捷性选择最优方案
ComfyUI-FramePackWrapper功能选择指南:如何根据资源控制与使用便捷性选择最优方案 【免费下载链接】ComfyUI-FramePackWrapper 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-FramePackWrapper ComfyUI-FramePackWrapper作为一款高效的AI视频生成插…...
eNSP安装避坑指南:WinPcap/Wireshark/VirtualBox依赖关系解析
eNSP安装避坑指南:WinPcap/Wireshark/VirtualBox依赖关系解析 当你第一次打开eNSP安装包时,可能会疑惑为什么需要同时安装WinPcap、Wireshark和VirtualBox这三个看似不相关的软件。这就像组装一台精密仪器——少了任何一个螺丝,整台机器都无法…...
石油勘探中的地震波“翻译官”:如何读懂时距曲线图里的地下秘密?
石油勘探中的地震波“翻译官”:如何读懂时距曲线图里的地下秘密? 站在戈壁滩的勘探营地,望着屏幕上那些看似杂乱的波形曲线,刚入行的地质工程师小李皱起了眉头。"这些弯弯曲曲的线条,到底在诉说什么样的地下故事&…...
影墨·今颜模型API接口开发与调用全指南
影墨今颜模型API接口开发与调用全指南 你是不是已经成功部署了影墨今颜模型,看着它能在本地生成惊艳的图片,心里正盘算着怎么把它变成一个能对外服务的“产品”?比如,让公司的设计团队直接调用,或者集成到自己的应用里…...
Qwerty Learner字体优化:提升阅读体验的细节处理
Qwerty Learner字体优化:提升阅读体验的细节处理 【免费下载链接】qwerty-learner 为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers 项目地址: https://gitcode.…...
