【C语言】文件拷贝(块读写)

【C语言】文件拷贝(块读写)


代码如下,可自行设置传输指针空间大小,修改宏定义SIZE值即可,其余的看注释,底部附执行流程图与拷贝后文件对比。


#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "sys/types.h"
#include "sys/stat.h"
#define SIZE (1024 * 1024)    //拷贝指针容量1M

int main(int argc, char *argv[]) {

    //参数提醒
    if (argc < 3) {
        printf("Missing radix parameter!\n");
        return -1;
    }

	//文件属性结构体
    struct stat *st;

    //文件指针(获取argv[]命令作为文件路径)
    FILE *sour = fopen(argv[1], "r");
    FILE *dest = fopen(argv[2], "w");

    //printf("File Size:%ldByte\n", st->st_size);

    //判空
    if (!sour || !dest) {
        printf("Copy file failed!\n");
        return -2;
    }

    //开辟拷贝暂存指针空间
    char *p = NULL;

    //保证小文件拷贝时开辟具体空间大小
    long size = 0;
    
    //记录文件属性
    stat(argv[1], st);

    //开辟空间
    if (st->st_size > SIZE) {
        
        p = (char*)malloc(sizeof(char) * SIZE);
        size = SIZE;

    } else {
        
        p = (char*)malloc(sizeof(char) * st->st_size + 10);
        size = st->st_size + 10;
    }

    //fread()函数成功会返回有效字符个数,用i来记录
    long count = 0;

    //开始拷贝
    while (!feof(sour)) {
        //指针空间置空
        memset(p, 0, size);

        //读写(块)
        count = fread(p, sizeof(char), size, sour);
        fwrite(p, sizeof(char), count, dest);
    }

    //成功提醒
    printf("Copy files successfully!\n");

    //释放空间,关闭文件
    free(p);
    fclose(sour);
    fclose(dest);
    return 0;
}

执行图:

在这里插入图片描述


对比图:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我姥爷是校长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值