C 编程,使用命令行参数从一个文件复制到另一个文件
Posted
技术标签:
【中文标题】C 编程,使用命令行参数从一个文件复制到另一个文件【英文标题】:C programming, copying from one file to another using command line arguments 【发布时间】:2021-12-20 04:45:10 【问题描述】:这是我的代码
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
if (argc < 4)
printf("Missing arguments\n");
return -1;
// Check if buffer is valid before reading anything
int bufferSize = atoi(argv[3]);
if (!bufferSize || bufferSize < 1)
printf("Invalid buffer size\n");
return -1;
printf("*** Copying from '%s' to '%s' (Buffer size: %dB) ***\n",
argv[1], argv[2], bufferSize);
// READ SOURCE FILE
FILE *inputFile = fopen(argv[1], "r");
if (!inputFile)
printf("Error opening source file\n");
return -1;
// READ DESTINATION FILE
FILE *outputFile = fopen(argv[2], "w");
if (!outputFile)
printf("Error opening destination file\n");
return -1;
int buffer[bufferSize];
int bytes;
do
bytes = fread(buffer, 1, bufferSize, inputFile);
if (fwrite(buffer, 1, bytes, outputFile) != bytes)
printf("Error writing into destination file\n");
return -1;
while (bytes > 0);
fclose(inputFile);
fclose(outputFile);
return 0;
但是当我尝试执行该文件时它不起作用。可能是什么问题呢? 这是命令行:
/Users/jurajc/Documents/Program/C/L1\ 1/C_program/c_program file.txt fileCopy.txt 512
*** Copying from 'file.txt' to 'fileCopy.txt' (Buffer size: 512B) ***
Error opening source file
【问题讨论】:
与您启动程序的目录相比,输入文件位于何处?执行“ls -l” 您可以在post中找到如何打印错误信息 【参考方案1】:无法打开输入文件file.txt
:因为它不在当前目录中,或者因为您没有读取权限。
您应该输出更多信息性错误消息。还要注意这些问题:
if (!bufferSize || bufferSize < 1)
是一个冗余测试。 if (bufferSize < 1)
就足够了。
错误信息应该输出到stderr
文件应以二进制模式打开,以便可靠地复制旧系统上的所有文件类型。
读/写循环不正确:您应该在fread
返回0
时停止在尝试将0
元素写入输出文件之前。
这是修改后的版本:
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
if (argc < 4)
fprintf(stderr, "Missing arguments\n");
return -1;
// Check if buffer is valid before reading anything
int bufferSize = atoi(argv[3]);
if (bufferSize < 1)
fprintf(stderr, "Invalid buffer size: %s\n", argv[3]);
return -1;
printf("*** Copying from '%s' to '%s' (Buffer size: %dB) ***\n",
argv[1], argv[2], bufferSize);
// READ SOURCE FILE
FILE *inputFile = fopen(argv[1], "rb");
if (!inputFile)
fprintf(stderr, "Error opening source file %s: %s\n",
argv[1], strerror(errno));
return -1;
// READ DESTINATION FILE
FILE *outputFile = fopen(argv[2], "wb");
if (!outputFile)
fprintf(stderr, "Error opening destination file %s: %s\n",
argv[2], strerror(errno));
return -1;
int buffer[bufferSize];
int bytes;
while ((bytes = fread(buffer, 1, bufferSize, inputFile)) != 0)
if (fwrite(buffer, 1, bytes, outputFile) != bytes)
fprintf(stderr, "Error writing into destination file: %s\n", strerror(errno));
return -1;
fclose(inputFile);
fclose(outputFile);
return 0;
【讨论】:
以上是关于C 编程,使用命令行参数从一个文件复制到另一个文件的主要内容,如果未能解决你的问题,请参考以下文章
QT下编程,有没有把文件从一路径下拷贝到另一路径下的函数,跪求