当前位置: 首页 > 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          // 异步操作结构指针
);

功能:向文件中写入数据

http://www.lryc.cn/news/2401441.html

相关文章:

  • [6-01-01].第12节:字节码文件内容 - 属性表集合
  • 基于机器学习的水量智能调度研究
  • 深度解码:我如何用“结构进化型交互学习方法”与AI共舞,从学习小白到构建复杂认知体系
  • 深入浅出 Scrapy:打造高效、强大的 Python 网络爬虫
  • ES6 Promise 状态机
  • Axure 与 Cursor 集成实现方案
  • 汽车加气站操作工证考试重点
  • 贪心算法应用:带权任务间隔调度问题详解
  • 用电脑控制keysight示波器
  • LLaMA-Factory - 批量推理(inference)的脚本
  • React从基础入门到高级实战:React 高级主题 - 测试进阶:从单元测试到端到端测试的全面指南
  • Ansible 剧本精粹 - 编写你的第一个 Playbook
  • 【Elasticsearch】Elasticsearch 核心技术(二):映射
  • 【计算机网络】网络层协议
  • .NET Core接口IServiceProvider
  • 结构型设计模式之Proxy(代理)
  • 案例分享--汽车制动卡钳DIC测量
  • Redis Set集合命令、内部编码及应用场景(详细)
  • C++算法动态规划1
  • 【快速预览经典深度学习模型:CNN、RNN、LSTM、Transformer、ViT全解析!】
  • KaiwuDB在边缘计算领域的应用与优势
  • 如何避免二极管过载?
  • Vue.js组件开发系统性指南
  • React---day9
  • 设计模式 - 模板方法模式
  • 鸿蒙开发List滑动每项标题切换悬停
  • ubuntu开机自动挂载windows下的硬盘
  • C# 实现软件开机自启动(不需要管理员权限)
  • 使用 Golang `testing/quick` 包进行高效随机测试的实战指南
  • 32 C 语言字符处理函数详解:isalnum、isalpha、iscntrl、isprint、isgraph、ispunct、isspace