用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实现文件复制功能的更多相关文章

  1. 使用Java的多线程和IO流写一个文件复制功能类

    创建一个复制功能类,继承Thread类,重写run()方法,把FileInputStream和FileOutputStream输入输出流写在run()方法内.示例代码如下: import java.i ...

  2. windowsAPI遍历文件夹(速度高于递归)

    #region API 遍历文件夹及其子文件夹和子文件 #region 声明WIN32API函数以及结构 ************************************** [DllImpo ...

  3. C#文件复制功能

    目的是将用户自定义文件复制到指定文件夹并且能查看该文件,下面是个人做的源码: sing System; using System.Collections.Generic; using System.C ...

  4. WindowsApi 解压缩文件

    .解压方法 转载自http://www.2cto.com/kf/201204/128704.html "C#解压.zip文件,网上一搜一大堆方法,有使用System.IO.Compressi ...

  5. java实现文件复制功能

    原理:把原文件读入到输入流里,然后利用输出流写入到新的文件. 代码如下: /** * 复制文件 * @param fromFile * @param toFile * <br/> * 20 ...

  6. 128 C语言实现文件复制功能(包括文本文件和二进制文件)

    文件的复制是常用的功能,要求写一段代码,让用户输入要复制的文件以及新建的文件,然后对文件进行复制.能够复制的文件包括文本文件和二进制文件,你可以复制1G的电影,也可以复制1Byte的txt文档. 实现 ...

  7. C语言实现文件复制功能(包括文本文件和二进制文件)

    文件的复制是常用的功能,要求写一段代码,让用户输入要复制的文件以及新建的文件,然后对文件进行复制.能够复制的文件包括文本文件和二进制文件,你可以复制1G的电影,也可以复制1Byte的txt文档. 实现 ...

  8. io流处理文件夹复制功能(java代码)

    拷贝某个目录下得所有文件拷指定位置 思想归纳 首先我们需要做的先获取到资源文件夹路径,这里我们先在程序中写死,然后我们还需要一个目标文件夹就是你需要拷贝到哪里.有了这两个文件夹我就可以进行复制了 然后 ...

  9. NIO与普通IO文件读写性能对比

    最近在熟悉java的nio功能.nio采用了缓冲区的方式进行文件的读写,这一点更接近于OS执行I/O的方式.写了个新旧I/O复制文件的代码,练练手,顺便验证一下两者读写性能的对比,nio是否真的比普通 ...

随机推荐

  1. ClickHouse源码笔记2:聚合流程的实现

    上篇笔记讲到了聚合函数的实现并且带大家看了聚合函数是如何注册到ClickHouse之中的并被调用使用的.这篇笔记,笔者会续上上篇的内容,将剖析一把ClickHouse聚合流程的整体实现. 第二篇文章, ...

  2. 又被逼着优化代码,这次我干掉了出入参 Log日志

    本文收录在个人博客:www.chengxy-nds.top,技术资源共享. 最近技术部突然刮起一阵 review 代码的小风,挨个项目组过代码,按理说这应该是件挺好的事,让别人指出自己代码中的不足,查 ...

  3. 微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示

    一.前言 项目中遇到的评分相关的需求其实还挺多.之前也写过网页中关于评分功能实现的文档.这次,是基于微信小程序开发而提炼出一个简单方便使用的方法,网页开发中同样可用.这次使用的还是字体,主要是字体这个 ...

  4. jmeter接口测试 -- 数据库操作(mysql)

    一.操作类型 语句类型 1.查询语句 2.非查询语句 1)update 2)insert into 3)删除 二.把返回值的化为变量 1.执行语句,并引用变量 2.查看结果

  5. pv绑定pvc

    创建pvapiVersion: v1kind: PersistentVolumemetadata: name: pv003 labels: app: vnc003 namespace: vnc-spa ...

  6. 【Gin-API系列】需求设计和功能规划(一)

    场景需求 数据库存储2个模型,每个模型都有一个或多个IP字段,需要通过 Golang Http Api(Restful Api) 返回 IP 信息. 模型1 - 服务器 ID 主机名 IP 内存大小 ...

  7. OceanBase安装和使用

    链接 https://mp.weixin.qq.com/s?spm=a2c6h.12873639.0.0.41f92c9bH5FL2Y&__biz=MzU3OTc2MDQxNg==&m ...

  8. python基础day6_字典dict

    数据类型划分:可变数据类型.不可变数据类型 不可变数据类型(又叫可哈希):元祖,bool ,int,str, 可变数据类型(又叫不可哈希):list,dict,set(集合) dict的key必须是不 ...

  9. PHP array_shift() 函数

    实例 删除数组中的第一个元素(red),并返回被删除的元素: <?php $a=array("a"=>"red","b"=> ...

  10. Python time altzone()方法

    描述 Python time altzone() 函数返回格林威治西部的夏令时地区的偏移秒数.高佣联盟 www.cgewang.com 如果该地区在格林威治东部会返回负值(如西欧,包括英国).对夏令时 ...