//复制文件
//定义复制可能发生的现象
#define COPY_SUCCESS 0
#define COPY_ILLEGAL_ARGUMENTS -1
#define COPY_SRC_OPEN_ERROR -2
#define COPY_SRC_READ_ERROR -3
#define COPY_DEST_OPEN_ERROR -4
#define COPY_DEST_WRITE_ERROR -5
#define COPY_UNKNOWN_ERROR -100
int CopyFile(char const *src, char const *dest) {
if (!src || !dest) {
// 参数至少有一个为 NULL
return COPY_ILLEGAL_ARGUMENTS;
}
FILE *src_file = fopen(src, "rb");
if (!src_file) {
// src 打开失败
return COPY_SRC_OPEN_ERROR;
}
FILE *dest_file = fopen(dest, "wb");
if (!dest_file) {
// dest 打开失败,记得关闭 src
fclose(src_file);
return COPY_DEST_OPEN_ERROR;
}
int result;
while (1) {
int next = fgetc(src_file);
if (next == EOF) {
if (ferror(src_file)) {
result = COPY_SRC_READ_ERROR;
} else if (feof(src_file)){
result = COPY_SUCCESS;
} else {
result = COPY_UNKNOWN_ERROR;
}
break;
}
if (fputc(next, dest_file) == EOF) {
// 目标文件写入失败
result = COPY_DEST_WRITE_ERROR;
break;
}
}
fclose(src_file);
fclose(dest_file);
// 复制成功
return result;
}
int main(){
int result = CopyFile("E:\\student\\Alion\\0127.1\\cmake-build-debug\\build.ninja","E:\\student\\Alion\\0127.1\\data.copy");
}
1. fgetc( ) 函数按字符序列顺序读取
2.fputc( ) 函数依次输出到另一个打开的文件中,就可以实现文本文件的复制。
目标文件——拷贝文件(注意替换代码中的文件存储位置。)