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

windows编程实现文件拷贝

项目源码链接:

实现文件拷贝功能(限制5GB大小) · 81c57de · 周不才/cpp_linux study - Gitee.com

知识准备:

1.句柄

句柄是一个用于标识和引用系统资源(如文件、窗口、进程、线程、位图等)的值。它不是资源的直接内存地址,而是一种间接引用

HANDLE是一种通用句柄,用于操作文件、线程、进程

2.LARGE_INTEGER

LARGE_INTEGER是一个联合体,用来在32位和64位系统上以一致的方式处理64位整数

typedef union _LARGE_INTEGER {struct {DWORD LowPart;   // 低32位LONG  HighPart;  // 高32位(注意:LONG是有符号的)};struct {DWORD LowPart;LONG  HighPart;} u;LONGLONG QuadPart;   // 完整的64位整数
} LARGE_INTEGER;
3.GetFileAttributesA()函数
DWORD GetFileAttributesA(LPCSTR lpFileName);

功能:获取指定路径下文件/目录的属性

参数:LPCSTR类型是32位常量字符串指针,lpFileName即为文件路径

输出:成功返回DWORD值(位掩码),包含文件/目录属性集;失败返回INVALID_FILE_ATTRIBUTES,调用GetLastError()获取详细错误信息

4.GetLastError()函数
DWORD GetLastError();

功能:获取错误信息

输出: 返回DWORD错误代码

5.CreateFileA()函数
HANDLE CreateFileA(LPCSTR                lpFileName,        // 文件路径字符串(ANSI)DWORD                 dwDesiredAccess,   // 访问模式(读/写)DWORD                 dwShareMode,       // 共享模式LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 安全属性(通常为NULL)DWORD                 dwCreationDisposition, // 文件存在或不存在时的操作DWORD                 dwFlagsAndAttributes,  // 文件属性和标志HANDLE                hTemplateFile          // 模板文件句柄(通常为NULL)
);

功能:用于创建或打开文件,并返回一个可以操作文件的句柄

输出:成功返回操作文件的句柄,失败返回INVALID_HANDLE_VALUE

6.GetFileSizeEx()函数
BOOL GetFileSizeEx(HANDLE         hFile,      //已打开文件的句柄(从CreateFile获得)PLARGE_INTEGER lpFileSize  //指向[LARGE_INTEGER]结构体的指针,用于接收文件大小
);

功能:通过句柄获取文件大小

输出:成功返回true,失败返回false

7.strncpy_s()函数
errno_t strncpy_s(char*       dest,     // 目标缓冲区size_t      destSize, // 目标缓冲区大小(字节数)const char* src,      // 源字符串size_t      count     // 最大复制字符数
);

功能:安全的字符串复制函数,缓冲区溢出保护以及自动添加终止符

输出:成功返回0,失败返回 EINVAL(参数无效,空指针)或 ERANGE(缓冲区太小或count值无效)

8.PathRemoveFileSpecA()函数
BOOL PathRemoveFileSpecA(LPSTR pszPath  // 指向文件路径的指针
);

功能:从文件路径中移除文件名部分,只保留目录路径

输出:成功返回true,失败返回false

9.PathCanonicalizeA()函数
BOOL PathCanonicalizeA(LPSTR  pszBuf,    // 接收规范化路径的缓冲区LPCSTR pszPath    // 源路径字符串
);

功能:规范化文件路径,去除路径中的相对路径和冗余符号,但是不会移除末尾反斜杠

输出:成功返回true,失败返回false

10._strcmpi()函数
int _strcmpi(const char *string1,const char *string2
);

功能:不区分大小写的字符串比较

输出:相同输出0

11.PathFindFileNameA()函数
LPSTR PathFindFileNameA([in] LPCSTR pszPath
);

功能:从文件路径中提取出文件名部分,包括其扩展名(查找最后一个 \ 或 / ,并返回该分隔符之后的字符串)

输出:文件名字符串

12.snprintf()函数
int snprintf(char* buffer,           // 目标缓冲区指针size_t size,            // 缓冲区大小const char* format,     // 格式字符串...                     // 可变参数列表
);

功能:按照指定格式拼接多个字符串到指定缓冲区中

13.HeapAlloc()函数
DECLSPEC_ALLOCATOR LPVOID HeapAlloc([in] HANDLE hHeap,    // 堆句柄[in] DWORD  dwFlags,  // 分配选项[in] SIZE_T dwBytes   // 分配字节数
);

功能:从指定的堆中动态分配内存块,Windows平台下替代malloc

输出:成功返回分配的到的内存地址,失败返回NULL

14.ReadFile()函数
BOOL ReadFile(HANDLE       hFile,                // 文件句柄LPVOID       lpBuffer,             // 接收数据的缓冲区DWORD        nNumberOfBytesToRead, // 要读取的字节数LPDWORD      lpNumberOfBytesRead,  // 接收实际读取字节数的指针LPOVERLAPPED lpOverlapped          // 异步操作结构指针
);

功能:从文件中读取数据

15.WriteFile()函数
BOOL WriteFile(HANDLE       hFile,                // 文件句柄LPCVOID      lpBuffer,             // 包含数据的缓冲区DWORD        nNumberOfBytesToWrite,// 要写入的字节数LPDWORD      lpNumberOfBytesWritten,// 接收实际写入字节数的指针LPOVERLAPPED lpOverlapped          // 异步操作结构指针
);

功能:向文件中写入数据

相关文章:

windows编程实现文件拷贝

项目源码链接: 实现文件拷贝功能(限制5GB大小) 81c57de 周不才/cpp_linux study - Gitee.com 知识准备: 1.句柄 句柄是一个用于标识和引用系统资源(如文件、窗口、进程、线程、位图等)的值。它不是资…...

[6-01-01].第12节:字节码文件内容 - 属性表集合

JVM学习大纲 二、属性表集合: 2.1.属性计数器: 2.2.属性表: 2.3.字节码文件组成5 -> 属性: 1.属性主要指的是类的属性,比如源码的文件名、内部类的列表等 2.4.字节码文件组成3 -> 字段: 1.字段中…...

基于机器学习的水量智能调度研究

摘要:随着城市化进程的加速和水资源供需矛盾的日益突出,传统的水量调度模式因缺乏精准预测和动态调控能力,难以满足现代供水系统对高效性、稳定性和节能性的要求。本文针对供水系统中用水峰谷预测不准确、能耗高、供需失衡等核心问题&#xf…...

深度解码:我如何用“结构进化型交互学习方法”与AI共舞,从学习小白到构建复杂认知体系

嗨,亲爱的学习者们,思考者们,以及所有渴望在知识海洋中自由翱行却时常感到迷茫的朋友们: 你是否也曾有过这样的深夜,面对堆积如山的学习资料,眼神迷离,内心却一片荒芜?明明每个字都…...

深入浅出 Scrapy:打造高效、强大的 Python 网络爬虫

在数据为王的时代,高效获取网络信息是开发者必备的技能。今天我将为大家介绍 Python 爬虫领域的王者框架——Scrapy。无论你是数据工程师、分析师还是开发者,掌握 Scrapy 都能让你的数据采集效率提升数倍! 项目地址:https://github.com/scrapy/scrapy 官方文档:https://do…...

ES6 Promise 状态机

状态机:抽象的计算模型,根据特定的条件或者信号切换不同的状态 一、Promise 是什么? 简单来说,Promise 就是一个“承诺对象”。在ES6 里,有些代码执行起来需要点时间,比如加载文件、等待网络请求或者设置…...

Axure 与 Cursor 集成实现方案

Axure 与 Cursor 集成实现方案 以下是一个完整的 Axure 与 Cursor AI 集成的原型实现方案,通过自定义 JavaScript 代码实现无缝对接: 一、整体架构设计 #mermaid-svg-f9hQDSN4hijU3mJY {font-family:"trebuchet ms",verdana,arial,sans-seri…...

汽车加气站操作工证考试重点

汽车加气站操作工证考试重点 一、汽车加气站操作工证考试主要内容 汽车加气站操作工证是从事CNG(压缩天然气)和LNG(液化天然气)加气站作业人员的必备资格证书。随着新能源汽车的快速发展,该证书的市场需求持续增长&a…...

贪心算法应用:带权任务间隔调度问题详解

贪心算法应用:带权任务间隔调度问题详解 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。带权任务间隔调度问题是贪心算法的一个经典应用场景。 问题定义…...

用电脑控制keysight示波器

KEYSIGHT示波器HD304MSO性能 亮点: 体验 200 MHz 至 1 GHz 的带宽和 4 个模拟通道。与 12 位 ADC 相比,使用 14 位模数转换器 (ADC) 将垂直分辨率提高四倍。使用 10.1 英寸电容式触摸屏轻松查看和分析您的信号。捕获 50 μVRMS …...

LLaMA-Factory - 批量推理(inference)的脚本

scripts/vllm_infer.py 是 LLaMA-Factory 团队用于批量推理(inference)的脚本,基于 vLLM 引擎,支持高效的并行推理。它可以对一个数据集批量生成模型输出,并保存为 JSONL 文件,适合大规模评测和自动化测试。…...

React从基础入门到高级实战:React 高级主题 - 测试进阶:从单元测试到端到端测试的全面指南

React 测试进阶:从单元测试到端到端测试的全面指南 引言 在2025年的React开发环境中,测试不仅是代码质量的保障,更是提升开发效率和用户体验的关键支柱。随着React应用的复杂性不断增加,高级测试技术——如端到端(E2…...

Ansible 剧本精粹 - 编写你的第一个 Playbook

Ansible 剧本精粹 - 编写你的第一个 Playbook 如果说 Ansible Ad-Hoc 命令像是你对厨房里的助手发出的零散口头指令(“切个洋葱”、“烧开水”),那么 Playbook 就是一份完整、详细、写在纸上的菜谱。它列明了所有需要的“食材”(变量),详细的“烹饪步骤”(任务),甚至还…...

【Elasticsearch】Elasticsearch 核心技术(二):映射

Elasticsearch 核心技术(二):映射 1.什么是映射(Mapping)1.1 元字段(Meta-Fields)1.2 数据类型 vs 映射类型1.2.1 数据类型1.2.2 映射类型 2.实际运用案例案例 1:电商产品索引映射案…...

【计算机网络】网络层协议

1. ICMP协议的介绍及应用 IP协议的助手 —— ICMP 协议 ping 是基于 ICMP 协议工作的,所以要明白 ping 的工作,首先我们先来熟悉 ICMP 协议。 ICMP 全称是 Internet Control Message Protocol,也就是互联网控制报文协议。 里面有个关键词 …...

.NET Core接口IServiceProvider

.NET Core 接口 IServiceProvider 深度剖析 在 .NET Core 和 .NET 5 的世界里,依赖注入(Dependency Injection,简称 DI)是构建可维护、可测试应用程序的关键技术。而 IServiceProvider 接口,正是依赖注入机制中的核心…...

结构型设计模式之Proxy(代理)

结构型设计模式之Proxy(代理) 前言: 代理模式,aop环绕通知,动态代理,静态代理 都是代理的一种,这次主要是记录设计模式的代理demo案例,详情请看其他笔记。 1)意图 为其…...

案例分享--汽车制动卡钳DIC测量

制动系统是汽车的主要组成部分,是汽车的主要安全部件之一。随着车辆性能的不断提高,车速不断提升,对车辆的制动系统也随之提出了更高要求,因此了解车辆制动系统中每个部件的动态行为成为了制动系统优化的主要途径,同时…...

Redis Set集合命令、内部编码及应用场景(详细)

文章目录 前言普通命令SADDSMEMBERSSISMEMBERSCARDSPOPSMOVESREM 集合间操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 命令小结内部编码使用场景 前言 集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是,集合中 1)元…...

C++算法动态规划1

DP定义: 动态规划是分治思想的延申,通俗一点来说就是大事化小,小事化无的艺术。 在将大问题化解为小问题的分治过程中,保存对这些小问题已经处理好的结果,并供后面处理更大规模的问题时直接使用这些结果。 动态规划具…...

【快速预览经典深度学习模型:CNN、RNN、LSTM、Transformer、ViT全解析!】

🚀快速预览经典深度学习模型:CNN、RNN、LSTM、Transformer、ViT全解析! 📌你是否还在被深度学习模型名词搞混?本文带你用最短时间掌握五大经典模型的核心概念和应用场景,助你打通NLP与CV的任督二脉&#xf…...

KaiwuDB在边缘计算领域的应用与优势

KaiwuDB 在边缘计算场景中主要应用于 工业物联网(IIoT)、智能电网、车联网 等领域,通过其分布式多模架构和轻量化设计,在边缘侧承担 数据实时处理、本地存储与协同分析 的核心作用。以下是具体案例和功能解析: 1. 典型…...

如何避免二极管过载?

如何避免二极管过载? 二极管作为电路中的基础元件,其过载可能导致性能下降甚至烧毁。以下从选型、安装、保护设计及散热四方面提供实用解决二极管过载方案: 精准选型匹配需求 根据电路特性选择二极管类型:高频电路优先选用肖特基…...

Vue.js组件开发系统性指南

结合核心概念、最佳实践及性能优化策略,帮助您构建高效可维护的组件体系: 一、组件基础与核心结构 1.单文件组件(SFC)组织 模板:使用<template>定义HTML结构,遵循单根元素原则。 逻辑:在<script>中通过export default导出组件选项(数据、方法、生命周期钩…...

React---day9

11、css 11.1 styled的基本使用 CSS-in-JS的模式就是一种将样式&#xff08;CSS&#xff09;也写入到JavaScript中的方式&#xff0c;并且可以方便的使用JavaScript的状态&#xff1b; npm add styled-componentsconst Title styled.h1font-size: 1.5em;text-align: center…...

设计模式 - 模板方法模式

该模式将定义一个操作中的算法骨架&#xff0c;并将算法的一些步骤延迟到子类中实现&#xff0c;使得子类可以在不改变算法结构的情况下重定义算法的某些特定步骤。 例如&#xff0c;炒菜的步骤是固定的&#xff0c;具体可分为倒油、热油、倒蔬菜、倒调料品、翻炒等。通过模板…...

鸿蒙开发List滑动每项标题切换悬停

鸿蒙开发List滑动每项标题切换悬停 鸿蒙List滑动每项标题切换悬停&#xff0c;功能也很常见 一、效果图&#xff1a; 二、思路&#xff1a; ListItemGroup({ header: this.itemHead(secondClassify, index) }) 三、关键代码&#xff1a; build() {Column() {List() {ListIt…...

ubuntu开机自动挂载windows下的硬盘

我是ubuntu和windows的双系统开发&#xff0c;在ubuntu下如果想要访问windows的硬盘&#xff0c;需要手动点击硬盘进行挂载&#xff0c;这个硬盘我每次编译完都会使用&#xff0c;所以用下面的步骤简化操作&#xff0c;让系统每次开机后自动挂载。 第一步. 确定硬盘的设备标识…...

C# 实现软件开机自启动(不需要管理员权限)

本文参考C#/WPF/WinForm/程序实现软件开机自动启动的两种常用方法&#xff0c;将里面中的第一种方法做了封装成AutoStart类&#xff0c;使用时直接两三行代码就可以搞定。 自启动的原理是将软件的快捷方式创建到计算机的自动启动目录下&#xff08;不需要管理员权限&#xff0…...

使用 Golang `testing/quick` 包进行高效随机测试的实战指南

使用 Golang testing/quick 包进行高效随机测试的实战指南 Golang testing/quick 包概述testing/quick 包的功能和用途为什么选择 testing/quick 进行测试快速入门&#xff1a;基本用法导入 testing/quick 包基本使用示例&#xff1a;快速生成测试数据quick.Check 和 quick.Val…...