[WinAPI] API 9 [文件的删除、复制和移动功能]

简介:


 

 

Windows系统为文件的删除、复制、重命名或移动文件提供了相应的API函数。删除文件使用DeleteFile函数;复制文件使用CopyFile函数;重命名文件和移动文件实际是一个操作,使用MoveFile函数。这几个函数的使用都非常简单,下面分别介绍。


(1) DeleteFile。
DeleteFile的功能是删除文件。以文件路径作为输入,指向需要删除的文件。文件路径可以是类似于“c:\files\delete.txt”的绝对路径,也可以是类似于“.\delete.txt”的相对路径,二相对于可执行文件所在的路径。
◇参数
lpFileName:输入参数,所要删除的文件的相对路径或绝对路径。
◇返回值
返回BOOL值,表示文件删除是否成功。
◇使用说明
如果程序返回失败,可以使用GetLastError函数获取错误信息。

 

(2) CopyFile。
CopyFile的功能是复制文件。通过参数输入复制文件和源路径和目的路径,路径可以是绝对路径也可以是相对路径,还可以通过参数指明如果目的路径已经存在文件,是否覆盖。可以使用CopyFileEx函数进行更为高级的操作,比如在复制进行过程中取消复制等。CopyFileEx可以指定
一个回调函数来处理文件复制中所可能发生的各种情况。
◇参数
lpExistingFileName:输入参数,已经存在的所需复制文件的源路径。
lpNewFileName:输入参数,新文件路径,复制文件的目的路径。
bFailIfExists:输入参数,指明如果在目的路径存在文件时是否覆

将不覆盖已经存在的文件,如果存在,则返回失败。这时使用GetLastError获取错误代码,将返回80(Ox50)。
◇返回值
返回BOOL值,表示文件复制是否成功。
◇使用说明
如果程序返回失败,可以使用GetLastError函数获取错误信息。


(3) MoveFile。
MoveFile的功能是移动、重命名文件和目录。通过参数输入源路径和目的路径,路径可以是绝对路径也可以是相对路径,如果目的路径的文件或目录已经存在,则返回失败。可以使用MoveFileEx函数来指定更多的选项,如果已经存在是否替换等。还可以使用MoveFileWithProgress指定一个回调函数来处理文件移动中所可能发生的各种情况。

◇参数
lpExistingFileName:输入参数,为已经存在的所需移动文件的源路径。
lpNewFileName:输入参数,新文件路径,移动文件的目的路径。
◇返回值
返回BOOL值,表示文件移动是否成功。
◇使用说明
如果程序返回失败,可以使用GetLastError函数获取错误信息。


(4) CopyFileEx、MoveFileEx以及MoveFileWithProgreSS.
这3个API函数功能更丰富,不再做详细介绍.

 

本实例使用DeleteFile、CopyFile、MoveFile来完成文件的删除、复制和移动功能。编译生成可执行文件,通过参数来指定程序完成的功能。-d参数表示删除文件,后面跟所需删除的文件路径;-m参数表示移动、重命名文件,之后的参数分别是源路径和目的路径;-c参数表示复制文件,之后跟源路径和目的路径。在复制文件过程中,如果文件已经存在,会提醒用户是否覆盖。

 

 

复制代码
  1 /* ************************************
  2 *《精通Windows API》 
  3 * 示例代码
  4 * wr.c
  5 * 4.3.2    创建、打开、读写文件,获取文件大小
  6 **************************************/
  7 
  8 /* 头文件 */
  9 #include <windows.h>
 10 #include <stdio.h>
 11 
 12 /* ************************************
 13 * DWORD ReadFileContent(LPSTR szFilePath)
 14 * 功能    获取文件大小
 15 *        读取文件内容,并以16进制的形式打印出来
 16 * 参数    LPSTR szFilePath
 17 *        文件路径
 18 **************************************/
 19 DWORD ReadFileContent(LPSTR szFilePath)
 20 {
 21     //文件大小
 22     HANDLE hFileRead;
 23     //保存文件大小
 24     LARGE_INTEGER liFileSize;
 25     //成功读取的文件数据大小
 26     DWORD dwReadedSize;
 27     //累加计算已经读取数据的大小
 28     LONGLONG liTotalRead = 0;
 29     //文件数据缓存
 30     BYTE lpFileDataBuffer[32];
 31 
 32     //打开已经存在的文件,读取内容。    
 33     hFileRead = CreateFileA(szFilePath,// 要打开的文件名
 34         GENERIC_READ,               // 以读方式打开
 35         FILE_SHARE_READ,           // 可共享读
 36         NULL,                      // 默认安全设置
 37         OPEN_EXISTING,             // 只打开已经存在的文件
 38         FILE_ATTRIBUTE_NORMAL,     // 常规文件属性
 39         NULL);                     // 无模板
 40 
 41     //打开文件是否成功。
 42     if(hFileRead==INVALID_HANDLE_VALUE)
 43     {
 44         printf("打开文件失败:%d",GetLastError());
 45     }
 46 
 47     if(!GetFileSizeEx(hFileRead,&liFileSize))
 48     {
 49         printf("获取文件大小失败:%d",GetLastError());
 50     }
 51     else
 52     {
 53         printf("文件大小为:%d/n",liFileSize.QuadPart);
 54     }
 55 
 56     //循环读取并打印文件内容
 57     while(TRUE)
 58     {
 59         DWORD i;
 60 
 61         if(!ReadFile(hFileRead,    //读文件的句柄
 62             lpFileDataBuffer,    //存储读取的文件内容
 63             32,                    //读的大小(字节)
 64             &dwReadedSize,        //实际读取的大小
 65             NULL))                //不使用Overlapped
 66         {
 67             printf("读文件错误:%d/n",GetLastError());
 68             break;
 69         }
 70         printf("读取了%d字节,文件内容是:",dwReadedSize);
 71         
 72         for(i=0; i<dwReadedSize; i++)
 73         {
 74             printf("0x%x ",lpFileDataBuffer[i]);
 75         }
 76         printf("/n");
 77         liTotalRead += dwReadedSize;
 78         if(liTotalRead == liFileSize.QuadPart)
 79         {
 80             printf("读文件结束/n");
 81             break;
 82         }
 83     }
 84     CloseHandle(hFileRead);
 85     return 0;
 86 }
 87 
 88 /* ************************************
 89 *  SaveDataToFile
 90 * 功能    将数据存储到文件末尾
 91 * 参数    LPSTR szFilePath    文件路径
 92 *        LPVOID lpData        需存储的数据
 93 *        DWORD dwDataSize    数据大小(字节)
 94 **************************************/
 95 DWORD SaveDataToFile(
 96                      LPSTR szFilePath,
 97                      LPVOID lpData,
 98                      DWORD dwDataSize)
 99 {
100     //文件句柄
101     HANDLE hFileWrite;
102     //成功写入的数据大小
103     DWORD dwWritedDateSize;
104 
105     //打开已经存在的文件,读取内容。    
106     hFileWrite = CreateFileA(szFilePath,    // 要打开的文件名
107         GENERIC_WRITE,            // 以写方式打开
108         0,                        // 可共享读
109         NULL,                    // 默认安全设置
110         OPEN_ALWAYS,            // 打开已经存在的文件,没用则创建
111         FILE_ATTRIBUTE_NORMAL,    // 常规文件属性
112         NULL);                    // 无模板
113     
114     //判断是否打开成功
115     if(hFileWrite==INVALID_HANDLE_VALUE)
116     {
117         printf("打开文件失败:%d/n",GetLastError());
118     }
119 
120     //设置文件指针到文件尾
121     SetFilePointer(hFileWrite,0,0,FILE_END);
122 
123     //将数据写入文件
124     if(!WriteFile(hFileWrite,lpData,dwDataSize,&dwWritedDateSize,NULL))
125     {
126         printf("写文件失败:%d/n",GetLastError());
127     }
128     else
129     {
130         printf("写文件成功,写入%d字节。/n",dwWritedDateSize);
131     }
132     CloseHandle(hFileWrite);
133     return 0;
134 }
135 
136 /* ************************************
137 * int main(void)
138 * 功能    演示使用SaveDataToFile和ReadFileContent函数
139 **************************************/
140 int main(void)
141 {
142     LPSTR szFileData = "这是一个例子";
143     SaveDataToFile("C://show.txt",szFileData,lstrlenA(szFileData));
144     ReadFileContent("C://show.txt");
145     return 0;
146 }
复制代码
相关文章
|
6月前
|
存储 缓存 API
实现电商物流API的实时追踪功能
在电商时代,实时物流追踪已成为提升用户体验的核心功能。本文详解如何通过物流API实现包裹位置追踪、ETA计算及数据优化,涵盖API集成、后端处理、前端展示与性能调优,助力构建高效可靠的追踪系统,提升用户信任与满意度。
377 0
|
6月前
|
消息中间件 缓存 监控
电商API接口功能全景图:商品、订单、支付、物流如何无缝衔接?
在数字化商业中,API已成为电商核心神经系统。本文详解商品、订单、支付与物流四大模块的API功能,探讨其如何协同构建高效电商闭环,并展望未来技术趋势。
|
9月前
|
API 开发者 Python
如何在API中实现搜索和过滤功能
本文介绍了如何为API添加搜索和过滤功能,使其更强大灵活。通过Flask示例,展示了按书名搜索、按作者或年份过滤书籍的方法,并结合两者实现复合查询。同时,提供了搜索不区分大小写、支持多过滤器组合、分页和输入验证等最佳实践。最后推荐了Apipost工具,它能简化API调试、负载测试及文档生成,提升开发效率。这些功能帮助用户更好地控制数据,优化API使用体验。
|
4月前
|
SQL 运维 关系型数据库
【产品升级】Dataphin V5.0版本发布:助力出海业务、增全量一体集成、异步调用API等更多功能等你发现
Dataphin是瓴羊推出的智能数据建设与治理平台,基于阿里巴巴内部实践,提供一站式数据建设与治理能力。V5.0版本研发新增支持Databricks作为离线计算引擎、支持MySQL数据库一键增全量同步、支持管理Hudi、Delta Lake表等;资产运营与消费持续提效,支持批量编辑目录名称及描述、Quick BI仪表板的上架管理等功能,增加资产可用性与盘点效率。
282 8
|
4月前
|
存储 数据可视化 Java
Java Stream API 的强大功能
Java Stream API 是 Java 8 引入的重要特性,它改变了集合数据的处理方式。通过声明式语法,开发者可以更简洁地进行过滤、映射、聚合等操作。Stream API 支持惰性求值和并行处理,提升了代码效率和可读性,是现代 Java 开发不可或缺的工具。
107 0
Java Stream API 的强大功能
|
5月前
|
供应链 API 数据安全/隐私保护
电商API数据接口的核心功能
电商API数据接口是电商平台与外部系统通信的核心工具,具备订单管理、库存同步和电子面单获取三大功能。它实现订单信息实时同步、多平台整合与状态更新,提升商家运营效率;通过库存数据双向同步,避免超卖并优化库存成本;同时自动获取电子面单号,加快发货流程。电商API在提升交易效率与用户体验方面具有重要作用。
|
6月前
|
Java API
Java API中Math类功能全景扫描
在实际使用时,这些方法的精确度和性能得到了良好的优化。当处理复杂数学运算或高精度计算时,`Math`类通常是足够的。然而,对于非常精细或特殊的数学运算,可能需要考虑使用 `java.math`包中的 `BigDecimal`类或其他专业的数学库。
145 11
|
6月前
|
API
Dataphin功能Tips系列(58)- 支持OAuth2.0认证方式的API数据源
在数据集成过程中,Dataphin需通过API从外部系统获取数据,而这些系统常采用动态令牌鉴权机制。本文介绍如何在Dataphin中配置支持OAuth 2.0认证的API数据源,实现自动获取和刷新访问令牌,确保安全高效地进行数据请求与集成。
157 8
|
5月前
|
JSON 算法 API
拼多多API跨店比价功能,选品效率提升60%!
拼多多推出API跨店比价功能,助力商家与消费者高效选品。通过自动化比价与智能算法,实现选品效率提升60%。开发者可快速集成,优化采购与购物体验。智能高效,抢占市场先机。了解详情:https://o0b.cn/evan
493 0