用WindowsAPI实现文件复制功能
用WindowsAPI实现文件复制功能
1. c代码
注释也在里面
文件名为 copyfile.c 运行出来的exe为 copyfile.exe
#include <windows.h>
#include <stdio.h>
#define BUF_SIZE 256
int main (int argc, LPTSTR argv [])
{
//LPTSTR类型 与char*等价,表示普通字符/字符串变量,指向字符/字符串的指针。
HANDLE handleIn, handleOut;//句柄(HANDLE)是资源的标识,操作系统要管理和操作这些资源,都是通过句柄来找到对应的资源
//HANDLE 是一个32位的无符号整数,是一个对象的句柄,可以认为存放的是一个对象的地址
// printf("%d", handleIn);
DWORD readsizeIn, readsizeOut;
//#define DWORD unsigned long 所以比较方便移植用的 ,Windows下经常用来保存地址(或者存放指针)
CHAR Buffer [BUF_SIZE]; //大写的CHAR也表示 CHAR为单字节字符 Windows为了消除各编译器的差别,重新定义了一些数据类型
//argc,argv 用命令行编译程序时有用
//argc: 整数,用来统计你运行程序时送给main函数的命令行参数的个数
//* argv[ ]: 指针数组,用来存放指向你的字符串参数的指针,每一个元素指向一个参数
//如果传入的参数不等于3的话 说明用户没有输入正常的参数(参数多了或者少了)
//此时提示用户正确的输入参数方法,并且退出程序
if (argc != 3) {
printf ("正确使用方法: copyfile 文件名1 文件名2\n");
return 1;
}
//如果通过上面判断语句的话说明参数输入符合形式 则进行下一个判断
//(1)判断文件1是否能打开, 创建一个句柄来标识输入文件
//CreateFile 这是一个多功能的函数,可打开或创建以下对象,并返回可访问的句柄:控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道。
handleIn = CreateFile (argv [1], GENERIC_READ,
FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
// printf("%ld", handleIn);
//如果文件打开失败 提示用户 并且调用GetLastError()函数取得上一个函数(也就是CreateFile函数)操作时所产生的错误代码
if (handleIn == INVALID_HANDLE_VALUE) {
printf ("不能打开被复制文件(文件1). 错误代码: %x\n",
GetLastError ());
return 2;
}
//同上 这次是判断是否能打开文件2, 解释如上
handleOut = CreateFile (argv [2], GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (handleOut == INVALID_HANDLE_VALUE) {
printf ("不能打开目标文件(文件2). 错误代码: %x\n",
GetLastError ());
return 3;
}
//下面进行文件复制的操作 调用ReadFile和WriteFile函数 每次读入字节数为BUF_SIZE
//readsizeIn指向实际读取字节数的指针 而且ReadFile调用成功,返回非0,readsizeIn也要是大于0才表示可以继续读
while (ReadFile (handleIn, Buffer, BUF_SIZE, &readsizeIn, NULL) && readsizeIn > 0) {
WriteFile (handleOut, Buffer, readsizeIn, &readsizeOut, NULL);
if (readsizeIn != readsizeOut) {
printf ("文件复制时出现错误。 错误代码: %x\n", GetLastError ());
return 4;
}
}
//提示复制成功!
printf ("文件复制时成功\n");
//关闭句柄
CloseHandle (handleIn);
CloseHandle (handleOut);
return 0;
}
2.运行结果
我此时的文件存在情况 只有1.txt 和 2.txt

(1)参数多或者少则提示用法

(2)被复制文件打不开

(3)成功复制

查看两个文件

(4)目的地文件打开失败
首先我要设置2.txt为只读 这样就会触发第二个错误

结果

用WindowsAPI实现文件复制功能的更多相关文章
- 使用Java的多线程和IO流写一个文件复制功能类
创建一个复制功能类,继承Thread类,重写run()方法,把FileInputStream和FileOutputStream输入输出流写在run()方法内.示例代码如下: import java.i ...
- windowsAPI遍历文件夹(速度高于递归)
#region API 遍历文件夹及其子文件夹和子文件 #region 声明WIN32API函数以及结构 ************************************** [DllImpo ...
- C#文件复制功能
目的是将用户自定义文件复制到指定文件夹并且能查看该文件,下面是个人做的源码: sing System; using System.Collections.Generic; using System.C ...
- WindowsApi 解压缩文件
.解压方法 转载自http://www.2cto.com/kf/201204/128704.html "C#解压.zip文件,网上一搜一大堆方法,有使用System.IO.Compressi ...
- java实现文件复制功能
原理:把原文件读入到输入流里,然后利用输出流写入到新的文件. 代码如下: /** * 复制文件 * @param fromFile * @param toFile * <br/> * 20 ...
- 128 C语言实现文件复制功能(包括文本文件和二进制文件)
文件的复制是常用的功能,要求写一段代码,让用户输入要复制的文件以及新建的文件,然后对文件进行复制.能够复制的文件包括文本文件和二进制文件,你可以复制1G的电影,也可以复制1Byte的txt文档. 实现 ...
- C语言实现文件复制功能(包括文本文件和二进制文件)
文件的复制是常用的功能,要求写一段代码,让用户输入要复制的文件以及新建的文件,然后对文件进行复制.能够复制的文件包括文本文件和二进制文件,你可以复制1G的电影,也可以复制1Byte的txt文档. 实现 ...
- io流处理文件夹复制功能(java代码)
拷贝某个目录下得所有文件拷指定位置 思想归纳 首先我们需要做的先获取到资源文件夹路径,这里我们先在程序中写死,然后我们还需要一个目标文件夹就是你需要拷贝到哪里.有了这两个文件夹我就可以进行复制了 然后 ...
- NIO与普通IO文件读写性能对比
最近在熟悉java的nio功能.nio采用了缓冲区的方式进行文件的读写,这一点更接近于OS执行I/O的方式.写了个新旧I/O复制文件的代码,练练手,顺便验证一下两者读写性能的对比,nio是否真的比普通 ...
随机推荐
- union注入
union注入 更多内容请看此链接:https://blog.csdn.net/weixin_45380284 1.判断是否存在注入: 方法一: 单引号法--在url最后加一个单引号,如: http: ...
- 软件测试必备技能,带你学习jmeter!
一:jmeter用户变量设置: 1.在线程组鼠标右击--添加--配置元件-用户定义的变量, 2.根据业务需求自定义变量的名称,添加需要的变量和对应的值 3.在脚本对应位置添加参数 二:文件参数化: 两 ...
- XML转Bean
XML转Bean有很多方式,我使用的是xtream方式实现xml与bean的互转. 下面是简单的xml转bean /** * XML转换成bean * @param obj * @return yuy ...
- Android Studio采坑记录
折腾了几个月的Android Studio,终于在今天被我搞定了 ( ̄▽ ̄)~* 开贴记录下,免得下次再次采坑 先说下我之前电脑的环境配置吧,sdk是几年前在网上下载别人整理出来的包,一直没有更新过 ...
- Flutter-Tips
1.报错:flutter: Another exception was thrown: Could not find a generator for route RouteSettings原因是一个工 ...
- Java 异常处理专题,从入门到精通
内置异常和Throwable核心方法 Java内置异常 可查异常(必须要在方法里面捕获或者抛出) ClassNoFoundException 应⽤程序试图加载类,找不到对应的类 IllegalAcce ...
- 如何在sed中使用变量,两种方法
第一 在sed条件中是不认识变量取值的 sed '/$x/d' test 所以要想它能够识别变量 sed "/$x/d/" test 方法简单就是把"单引号"变 ...
- Day04_NTFS安全权限&文件共享服务器
NTFS安全权限 一.NTFS权限概述 1.通过设置NTFS权限,实现不同的用户访问同一个对象但是具有不同的访问权限 2.分配了正确的访问权限后,用户才能访问其资源 3.设置权限防止资源被篡改.删除 ...
- python绝技:运用python成为顶级黑客|中文pdf完整版[42MB|网盘地址附提取码自行提取|
Python 是一门常用的编程语言,它不仅上手容易,而且还拥有丰富的支持库.对经常需要针对自己所 处的特定场景编写专用工具的黑客.计算机犯罪调查人员.渗透测试师和安全工程师来说,Python 的这些 ...
- 部分浏览器 set-cookie 不成功踩坑记录
事件起因: 公司正在做一个sso的单点登录的项目,做完之后,在测试阶段,不同的终端的兼容测试时候,好几个不同的浏览器出现了不同的问题,有登录之后自动退出,有登陆不成功等问题. 在 pc 端只有 uc ...