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