windows编程实现文件拷贝

news2025/6/6 8:28:42

项目源码链接:

实现文件拷贝功能(限制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          // 异步操作结构指针
);

功能:向文件中写入数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2401441.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

用电脑控制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 文件,适合大规模评测和自动化测试。…

【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,也就是互联网控制报文协议。 里面有个关键词 …

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

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

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

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

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

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

C++算法动态规划1

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

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

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

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

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

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

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

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

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

32 C 语言字符处理函数详解:isalnum、isalpha、iscntrl、isprint、isgraph、ispunct、isspace

1 isalnum() 函数 1.1 函数原型 #include <ctype.h>int isalnum(int c); 1.2 功能说明 isalnum() 函数用于检查传入的整数参数是否为 ASCII 编码的字母或数字字符&#xff08;A - Z、a - z、0 - 9&#xff0c;对应 ASCII 值 65 - 90、97 - 122、48 - 57&#xff09;。…

Qt实现一个悬浮工具箱源码分享

一、效果展示 二、源码分享 hoverToolboxWidget.h #ifndef HOVERTOOLBOXWIDGET_H #define HOVERTOOLBOXWIDGET_H#include <QWidget> #include <QMouseEvent> #include <QPropertyAnimation> #include <QStyleOption> #include <QPainter>namespa…

线夹金具测温在线监测装置:电力设备安全运行的“隐形卫士”

在电网系统中&#xff0c;线夹金具是连接导线与输电塔架的关键部件&#xff0c;其运行状态直接影响电力传输的稳定性。传统人工巡检方式存在效率低、盲区多、数据滞后等问题&#xff0c;而线夹金具测温在线监测装置的普及&#xff0c;正为电力设备运维带来革新。 一、工作原理&…

《TCP/IP 详解 卷1:协议》第4章:地址解析协议

ARP 协议 地址解析协议&#xff08;ARP, Address Resolution Protocol&#xff09;是IPv4协议栈中一个关键的组成部分&#xff0c;用于在网络层的IP地址与数据链路层的硬件地址&#xff08;如MAC地址&#xff09;之间建立映射关系。它的主要任务是&#xff1a; 将32位的IPv4地…