C语言:大量文件夹内的文件拷贝

1.已知文件所有信息的处理,进行子文件夹内文件的拷贝

  父文件夹 no

  子文件夹(三百多个)

(子文件夹内)CONTCAR 拷贝出 POSCAR

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_PATH_LEN 100

//文件的拷贝


int copy_file(const char* dest, const char* src) {


//打开文件。        

    //选用“rb”与“wb”,对于文本文件和二进制文件的可以处理。
    //r和w,只可以处理文本文件。                       《c语言程序设计现代方法》


    FILE* source = fopen(src, "rb");
    if (!source) {
        fprintf(stderr, "无法打开源文件: %s\n", src);
        return 0;
    }

    FILE* target = fopen(dest, "wb");
    if (!target) {
        fclose(source);
        fprintf(stderr, "无法创建目标文件: %s\n", dest);
        return 0;
    }


//开始拷贝。

    //选择getc与putc是putc快于fputc。《c语言程序设计现代方法》
    
    
    int buffer;
    while ((buffer = getc(source))!=EOF) {
        putc(buffer, target);
    }

    fclose(source);
    fclose(target);
    return 1;
}

int main() {
    
    // 完整的子目录列表
    const char* subdirs[] = {
        "CdAuPt112", "CoNbPt121", "CoZrPt211", "CrZnPt112", "CuRePt112",
        "FeCoPt121", "MnAuPt121", "MoOsPt211", "NbTaPt121", "NiZrPt121",
        "RuAuPt112", "ScOsPt211", "TcHfPt121", "TiFePt112", "TiTcPt211",
        "VFePt211", "WRePt112", "YZrPt112", "ZrCdPt112", "ZrOsPt121",
        "ZrTaPt211", "CdAuPt121", "CoNiPt121", "CrAuPt121", "CrZnPt211",
        "CuRePt211", "FeCoPt211", "MnCdPt121", "MoPdPt121", "NbTaPt211",
        "NiZrPt211", "RuAuPt211", "ScPdPt121", "TcHfPt211", "TiFePt121",
        "TiVPt112", "VNbPt211", "WRePt121", "YZrPt121", "ZrCdPt121",
        "ZrOsPt211", "ZrTcPt112", "CdAuPt211", "CoNiPt211", "CrCdPt121",
        "CrZrPt112", "CuRhPt121", "FeCuPt121", "MnCuPt121", "MoRePt112",
        "NbWPt112", "PdAuPt211", "RuCdPt112", "ScPdPt211", "TcIrPt112",
        "TiFePt211", "TiWPt121", "VOsPt121", "WRePt211", "YZrPt211",
        "ZrCdPt211", "ZrPdPt112", "ZrTcPt121", "CdHfPt121", "CoOsPt112",
        "CrCoPt121", "CrZrPt121", "CuRhPt211", "FeHfPt112", "MnIrPt112",
        "MoRePt121", "NiCdPt112", "PdOsPt112", "RuHfPt211", "ScTaPt211",
        "TcOsPt121", "TiMnPt121", "TiWPt211", "VPdPt112", "YAgPt211",
        "ZnAuPt211", "ZrHfPt112", "ZrPdPt121", "ZrTcPt211", "CdOsPt211",
        "CoPdPt112", "CrCoPt211", "CrZrPt211", "CuTaPt112", "FeIrPt112",
        "MnNiPt112", "MoRePt211", "NiCuPt121", "PdWPt112", "RuIrPt121",
        "ScTiPt112", "TcPdPt112", "TiMoPt211", "TiYPt112", "VRhPt211",
        "YHfPt112", "ZnPdPt112", "ZrHfPt121", "ZrPdPt211", "ZrWPt112",
        "CdRePt211", "CoPdPt121", "CrCuPt112", "CuAgPt112", "CuTcPt112",
        "FeNbPt112", "MnOsPt211", "MoTaPt112", "NiCuPt211", "PdWPt211",
        "RuPdPt112", "ScWPt211", "TcPdPt121", "TiNbPt121", "TiYPt211",
        "VRuPt112", "YHfPt121", "ZnRhPt121", "ZrHfPt211", "ZrRePt112",
        "ZrWPt121", "CdWPt112", "CoPdPt211", "CrCuPt121", "CuAgPt211",
        "CuTcPt121", "FeNiPt121", "MnRuPt121", "MoTcPt121", "NiIrPt121",
        "ReAuPt211", "RuRhPt121", "ScYPt112", "TcRePt121", "TiNiPt121",
        "TiZnPt112", "VRuPt121", "YHfPt211", "ZnTaPt121", "ZrIrPt112",
        "ZrRePt121", "ZrWPt211", "CoAgPt112", "CoRePt112", "CrIrPt211",
        "CuAuPt112", "CuTcPt211", "FeNiPt211", "MnTaPt211", "MoTcPt211",
        "NiOsPt112", "ReIrPt112", "RuRhPt211", "ScYPt211", "TcRePt211",
        "TiNiPt211", "TiZrPt112", "VTaPt211", "YOsPt112", "ZnZrPt112",
        "ZrIrPt121", "ZrRePt211", "CoAgPt211", "CoRePt211", "CrMoPt211",
        "CuIrPt112", "CuWPt112", "FeOsPt112", "MnTcPt121", "MoWPt112",
        "NiPdPt112", "RhAgPt112", "RuWPt121", "ScZrPt112", "TcRhPt211",
        "TiOsPt112", "TiZrPt121", "VWPt211", "YOsPt211", "ZnZrPt121",
        "ZrIrPt211", "ZrRhPt112", "CoAuPt112", "CoRhPt121", "CrNiPt121",
        "CuIrPt121", "CuWPt211", "FePdPt112", "MnWPt121", "NbAgPt121",
        "NiPdPt121", "RhAgPt211", "ScAgPt211", "ScZrPt121", "TcRuPt121",
        "TiPdPt112", "TiZrPt211", "VZrPt112", "YPdPt112", "ZnZrPt211",
        "ZrMoPt112", "ZrRhPt121", "CoCdPt112", "CoRhPt211", "CrNiPt211",
        "CuIrPt211", "CuZnPt211", "FeRePt121", "MnYPt121", "NbCdPt112",
        "NiRePt112", "RhIrPt112", "ScCrPt112", "ScZrPt211", "TcTaPt121",
        "TiPdPt121", "VAgPt121", "VZrPt121", "YRePt121", "ZrAgPt112",
        "ZrMoPt121", "ZrRhPt211", "CoCdPt211", "CoRuPt112", "CrRhPt112",
        "CuMoPt112", "CuZrPt112", "FeRhPt121", "MnZrPt112", "NbCdPt211",
        "NiRuPt112", "RhPdPt112", "ScCuPt211", "TaOsPt121", "TcWPt211",
        "TiRePt121", "VAuPt121", "VZrPt211", "YRePt211", "ZrAgPt121",
        "ZrMoPt211", "ZrRuPt112", "CoHfPt112", "CoWPt211", "CrRhPt121",
        "CuNbPt211", "CuZrPt121", "FeRuPt121", "MnZrPt121", "NbHfPt112",
        "NiTaPt112", "RhPdPt121", "ScHfPt121", "TaWPt121", "TiAuPt211",
        "TiRePt211", "VCdPt112", "WAuPt121", "YRuPt112", "ZrAgPt211",
        "ZrNbPt112", "ZrRuPt121", "CoIrPt112", "CoZnPt211", "CrRhPt211",
        "CuOsPt112", "CuZrPt211", "FeZrPt112", "MnZrPt211", "NbHfPt121",
        "NiTaPt121", "RhRePt112", "ScHfPt211", "TaWPt211", "TiCoPt112",
        "TiRuPt112", "VCoPt211", "WAuPt211", "YTaPt112", "ZrAuPt112",
        "ZrNbPt121", "ZrRuPt211", "CoMoPt112", "CoZrPt112", "CrTcPt211",
        "CuOsPt211", "FeAuPt121", "FeZrPt121", "MoIrPt112", "NbOsPt121",
        "NiWPt121", "RhRePt211", "ScMoPt121", "TcAuPt121", "TiCoPt121",
        "TiRuPt121", "VCrPt211", "WOsPt112", "YTcPt211", "ZrAuPt121",
        "ZrNbPt211", "ZrTaPt112", "CoMoPt211", "CoZrPt121", "CrWPt121",
        "CuPdPt112", "FeCdPt121", "FeZrPt211", "MoOsPt112", "NbRePt112",
        "NiZrPt112", "RuAgPt112", "ScNiPt121", "TcCdPt112", "TiCuPt211",
        "TiRuPt211", "VCuPt121", "WOsPt211", "YWPt112", "ZrAuPt211",
        "ZrOsPt112", "ZrTaPt121",
        NULL  // 结束标记
    };
    
    printf("开始处理目录: no\n");
    int failure_count = 0;
    int success_count = 0;
    int total_count = 0;
    

    for (int i = 0; subdirs[i] != NULL; i++) {
        total_count++;
    }
    for (int i = 0; subdirs[i] != NULL; i++) {

        //拷贝来源的路径
        char contcar_path[MAX_PATH_LEN] = {0};
        strcat(strcat(strcat(contcar_path, "no/"), subdirs[i]), "/CONTCAR");

        //拷贝对象的路径
        char poscar_path[MAX_PATH_LEN] = {0};
        strcat(strcat(strcat(poscar_path, "no/"), subdirs[i]), "/POSCAR");

        //文件的拷贝
        if (copy_file(poscar_path,contcar_path )) {
            success_count++;
            printf("[%d/%d] 成功: %s\n", success_count, total_count, contcar_path);
        } else {
            failure_count++;
            fprintf(stderr, "[%d/%d] 失败: %s\n", failure_count, total_count, contcar_path);
        }
    }
    
    printf("\n处理完成!\n");
    printf("成功: %d, 失败: %d, 总计: %d\n", 
           success_count, failure_count, total_count);
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值