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

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); 此处打开文件&#xff0c;参数依次 已有文件的路径&#xff0c;注意…...

6-2、T型加减速计算简化【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍简化T型加减速计算过程&#xff0c;使其适用于单片机数据处理。简化内容包括浮点数转整型数计算、加减速对称处理、预处理计算 一、浮点数转整型数计算 根据上一节内容已知 常用的晶振大小…...

配置Jenkins自动构建打包项目

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 需求说明 1、给A项目配置jenkins每2小时无条件自动构建一次&#xff0c;无论是否有代码提交。 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超声波模块&#xff0c;使其发送超声波&#xff0c;遇到物体反射回超声波来实现距离测量&#xff0c;其原理就是在发射超声波到接收超声波会有一段时间&#xff0c;而超声波在空气中传播的速度为声速&…...

LLM应用开发与落地:使用gradio十分钟搭建聊天UI

一、背景 如果你是做LLM应用开发的&#xff0c;特别是做后端开发&#xff0c;你一定会遇到怎么快速写一个聊天UI界面来调试prompt或agent的问题。这时候的你可能在苦恼中&#xff0c;毕竟react.js, next.js, css, html也不是每个人都那么熟练&#xff0c;对吧&#xff1f;即使…...

智慧城市:打造低碳未来,引领城市数字化转型新篇章

在“万物皆可数字化”的新时代浪潮下&#xff0c;智慧城市作为未来城市发展的先锋方向&#xff0c;正在以前所未有的速度和规模重塑我们的城市面貌。 智慧城市不仅是一个技术革新的标志&#xff0c;更是城市治理、民生服务等领域全面升级的重要引擎。 一、智慧城市的多元应用领…...

ChatGPT之制作短视频

引言 今天带来了如何使用 ChatGPT和剪映来制作简单的短视频教程&#xff0c;在这其中 ChatGPT的作用主要是帮我们生成文案&#xff0c;剪映的功能就是根据文案自动生成视频&#xff0c;并配上一些图片、动画、字幕和解说。 ChatGPT生成文案 首先&#xff0c;我们需要使用提示…...

k8s学习(RKE+k8s+rancher2.x)成长系列之简配版环境搭建(二)

三、简配版集群&#xff0c;适用于demo环境 1.集群架构设计 主机名角色配置(核数&#xff0c;内存&#xff0c;磁盘)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如何备份某些库的某些表 要备份某个库里的部分表&#xff0c;该如何操作&#xff1f; 例如&#xff1a;要备份db01库里的20张表&#xff0c;表很多又不想备份整个库 或者要备份多个库里的不同表&#xff0c;又如何操作&#xff1f; 例如&#xff1a;备份…...

C++类和对象入门(三)

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 前言 在c中&#xff0c;类型分为两类&#xff0c;一类是内置类型&#xff0c;另一类是自定义类型。 1.内置类型&#xf…...

【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 上一节中&#xff0c;我们了解了 urllib 的基本用法&#xff0c;但是其中确实有不方便的地方&#xff0c;比如处理网页验证和 Cookies 时&#xff0c;需要写 Opener 和 Handler 来处理。为了更加方便地实现这些操作&#xff0c;就有了更为强大的库 requests&…...

【漏洞复现】EPON上行A8-C政企网关信息泄露漏洞

Nx01 产品简介 EPON上行A8-C政企网关是一款终端产品&#xff0c;提供企业网络解决方案。 Nx02 漏洞描述 EPON上行A8-C政企网关敏感信息泄露漏洞&#xff0c;攻击者通过敏感信息泄露获取管理员密码。 Nx03 产品主页 fofa-query: "ZXECS" && title"Web…...

发送get请求并且发送请求头(header),java实现

发送get请求时&#xff0c;发送请求头&#xff08;Header&#xff09;中的内容 方便第二次调用其他url时传递参数&#xff0c;例如userCode或者租户编码 调用方式 Autowired private HttpServletRequest request;先注入HttpServletRequestpublic xxx xxx(){String url &quo…...

介绍docker

一&#xff1a;介绍docker&#xff1a; Docker 并没有单独的图形界面&#xff0c;它主要通过命令行来进行管理和操作 1、 docker ps&#xff1a;显示正在运行的容器。 docker images&#xff1a;显示本地的镜像。 docker run&#xff1a;创建并启动一个新容器。 docker stop&a…...

Web课程学习笔记--CSS盒模型

CSS 盒模型 盒模型 网页设计中常听的属性名&#xff1a;内容(content)、填充(padding)、边框(border)、边界(margin)&#xff0c; CSS盒子模式都具备这些属性。 这些属性我们可以把它转移到我们日常生活中的盒子&#xff08;箱子&#xff09;上来理解&#xff0c;日常生活中所…...

中学一级教师是什么职称等级

在教育的世界里&#xff0c;每一个角色都肩负着不可或缺的使命。其中&#xff0c;中学一级教师这一职称&#xff0c;就如同武侠小说里的“隐藏高手”&#xff0c;不显山不露水&#xff0c;却拥有着举重若轻的实力。 中学一级教师究竟是个怎样的职称等级呢&#xff1f;今天&…...

2024年2月CCF-全国精英算法大赛题目

第一次参加这种比赛&#xff0c;虽然是c类赛事&#xff0c;但是是ccf主办的&#xff0c;难度还是有点的&#xff0c;主要是前面签到题主要是思想&#xff0c;后面的题目难度太高&#xff0c;身为力扣只刷了一百多道题目的我解决不了&#xff0c;这几道我只做了B,C题,E题超时了&…...

终极指南:buger/jsonparser如何10倍加速处理第三方API不确定性数据

终极指南&#xff1a;buger/jsonparser如何10倍加速处理第三方API不确定性数据 【免费下载链接】jsonparser One of the fastest alternative JSON parser for Go that does not require schema 项目地址: https://gitcode.com/gh_mirrors/js/jsonparser 在处理第三方AP…...

MariaDB Docker容器权限配置问题分析与解决方案

MariaDB Docker容器权限配置问题分析与解决方案 1. 问题背景 在使用MariaDB Docker容器时&#xff0c;用户遇到了远程访问权限配置失效的问题。具体表现为&#xff1a; 手动创建的远程用户&#xff08;如root%、****%、********%&#xff09;在容器重启后无法远程连接权限表中显…...

Qwen3.5-2B轻量化技术解析:模型剪枝+KV Cache优化如何降低70%显存占用

Qwen3.5-2B轻量化技术解析&#xff1a;模型剪枝KV Cache优化如何降低70%显存占用 1. 轻量化模型的核心价值 在AI模型部署领域&#xff0c;大模型的资源消耗一直是阻碍其广泛应用的瓶颈。Qwen3.5-2B作为一款仅20亿参数的多模态基础模型&#xff0c;通过创新的轻量化技术实现了…...

深入S32K3XX以太网内部:用逻辑分析仪抓取MII时序,图解数据收发全过程

深入S32K3XX以太网内部&#xff1a;用逻辑分析仪抓取MII时序&#xff0c;图解数据收发全过程 在嵌入式系统开发中&#xff0c;以太网通信的底层实现往往像一个黑盒子——我们配置好寄存器&#xff0c;数据就神奇地传输了。但对于真正追求技术深度的开发者来说&#xff0c;理解信…...

FireRedASR Pro在微信小程序开发中的应用:实时语音输入与转写

FireRedASR Pro在微信小程序开发中的应用&#xff1a;实时语音输入与转写 不知道你有没有这样的经历&#xff1a;用手机打字回复长消息时&#xff0c;手指按得发酸&#xff1b;或者在线听课时&#xff0c;想快速记下老师的重点&#xff0c;手速却跟不上语速。在移动优先的今天…...

VSCode + WSL-Ubuntu 20.04 开发环境配置:从零搭建C++开发环境(含Clangd智能补全)

VSCode WSL-Ubuntu 20.04 开发环境配置&#xff1a;从零搭建C开发环境&#xff08;含Clangd智能补全&#xff09; 在跨平台开发日益普及的今天&#xff0c;微软推出的WSL&#xff08;Windows Subsystem for Linux&#xff09;为Windows开发者提供了无缝的Linux开发体验。结合…...

爱毕业aibiye等8款智能应用显著改善了论文撰写体验,编程与学术研究流程更加顺畅

文章总结表格&#xff08;工具排名对比&#xff09; 工具名称 核心优势 aibiye 精准降AIGC率检测&#xff0c;适配知网/维普等平台 aicheck 专注文本AI痕迹识别&#xff0c;优化人类表达风格 askpaper 快速降AI痕迹&#xff0c;保留学术规范 秒篇 高效处理混AIGC内容&…...

终极揭秘:4步掌握Unity视觉还原技术核心

终极揭秘&#xff1a;4步掌握Unity视觉还原技术核心 【免费下载链接】UniversalUnityDemosaics A collection of universal demosaic BepInEx plugins for games made in Unity3D engine 项目地址: https://gitcode.com/gh_mirrors/un/UniversalUnityDemosaics Universa…...

Amlogic S9XXX设备系统改造完全指南:从入门到进阶

Amlogic S9XXX设备系统改造完全指南&#xff1a;从入门到进阶 【免费下载链接】amlogic-s9xxx-armbian Supports running Armbian on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l, rk3588, rk35…...

内容营销对 SEO 有什么影响

<h3 id"seo">内容营销对 SEO 有什么影响</h3> <h4 id"">引言</h4> <p>在当今数字化时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;和内容营销被广泛认为是网站流量和业务增长的关键驱动因素。许多企业在网站建设…...