c语言编写一个程序来创建给定文件的副本。文件名在命令行中指定。 输入格式./a.out from.txt to.txt
时间: 2024-09-24 13:18:09 浏览: 37
这是一个用C语言编写Linux平台的http文件下载器, 以命令行的方式运行.zip
在C语言中,我们可以使用`fopen`、`fclose`和`fwrite`函数来创建文件的副本。这里是一个简单的程序示例,它接受两个命令行参数:源文件名(from.txt)和目标文件名(to.txt),然后复制源文件的内容到目标文件:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义复制文件大小的最大尝试次数
#define MAX_RETRIES 5
int main(int argc, char *argv[]) {
if (argc != 3) { // 检查是否正确提供文件名
printf("Usage: %s from.txt to.txt\n", argv[0]);
return 1;
}
const char *from_file = argv[1];
const char *to_file = argv[2];
// 尝试打开源文件并获取其大小
FILE *src_file = fopen(from_file, "rb");
if (!src_file) {
perror("Error opening source file");
return 1;
}
fseek(src_file, 0, SEEK_END); // 移动到文件末尾
off_t src_size = ftell(src_file);
fseek(src_file, 0, SEEK_SET); // 回到文件开头
// 打开目标文件以追加模式,如果存在则清空
FILE *dst_file = fopen(to_file, "w+b");
if (!dst_file) {
perror("Error opening destination file");
fclose(src_file);
return 1;
}
ftruncate(fileno(dst_file), 0); // 清除现有内容
// 分块复制数据,防止内存溢出
size_t chunk_size = 1024; // 可调整的块大小
char buffer[chunk_size];
for (size_t retries = 0; retries < MAX_RETRIES; retries++) {
size_t bytes_read = fread(buffer, 1, chunk_size, src_file);
if (bytes_read == 0) break; // 如果读取结束,跳出循环
if (fwrite(buffer, 1, bytes_read, dst_file) != bytes_read) {
perror("Error writing data");
fclose(dst_file);
fclose(src_file);
return 1;
}
}
// 关闭文件句柄
fclose(src_file);
fclose(dst_file);
printf("File copied successfully.\n");
return 0;
}
```
运行这个程序时,在终端中键入:
```
./a.out from.txt to.txt
```
将`from.txt`替换为你想要复制的源文件路径,`to.txt`替换为目标文件路径。
阅读全文