【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;
}

执行图:

在这里插入图片描述


对比图:

在这里插入图片描述

发布了44 篇原创文章 · 获赞 68 · 访问量 5145

猜你喜欢

转载自blog.csdn.net/qq_25404477/article/details/98117297