大家好,又见面了,我是你们的朋友全栈君。
实现的的功能:复制文件功能
一:功能分析
1.1windows 系统下的 dos命令中 指令 copy 能实现文件的复制。
比如: copy log.txt log1.txt 就是将log.txt 文件复制一份,复制后的文件名称为 log1.txt
图例:
1.2copy命令实现要求:
自己创造一个命令,比如:test.exe log.txt test.bak 有三个参数,第一个参数是模拟实现的copy的可执行程序,第二个参数要拷贝的文件名称,第三个文件是拷贝后的文件名称。
1.3思路分析:
- copy命令 由我们写的程序来实现
- 要拷贝的文件名称以及拷贝后的名称,由程序自动获取和输出,不用自己输入。可以利用main函数的参数列表 来实现这个功能
- 复制过程 就是打开文件A,将文件A中的内容逐字节写到文件B中。
总结一下:核心内容就两点,main函数的参数列表的使用 和 文件的读写操作。
二:实现代码:
int main(int argc,char* argv[], char* envp[])
{
FILE *fRead = NULL;
FILE *fWrite = NULL;
FILE *tmp = NULL;
char ch ;
//命令行参数 只有三个
if (argc != 3)
{
//perror("orders are wrong");
//exit(EXIT_FAILURE);
printf("参数有误");
return 0;
}
tmp = fopen(argv[1], "r");
if (tmp == NULL)
{
perror("open file for read failed:");
exit(EXIT_FAILURE);
}
fRead = tmp;
//打开要写的文件
tmp = fopen(argv[2],"w");
if (tmp == NULL)
{
//先关闭已经打开的文件
fclose(tmp);
tmp = NULL;
perror("open file for write failed:");
exit(EXIT_FAILURE);
}
fWrite = tmp;
//拷贝过程
while ( (ch = fgetc(fRead)) != EOF)
{
//逐字符写入文件
fputc(ch,fWrite);
}
//关闭文件
fclose(fRead);
fRead = NULL;
fclose(fWrite);
fWrite = NULL;
system("pause");
return 0;
}
运行结果:打开复制后的文件,与原文件一样。
补充:main函数的参数列表介绍:
main( int argc, char *argv[ ], char *envp[ ] )
{
program-statements
}
- int argc:argc是整型变量,表示命令行参数的个数(argc 包含可执行程序名称在内,还包括参数在内)
- char *argv[ ]:字符指针数组,每个元素是字符指针,指向一个字符串,这些字符串就是命令行中的每一个参数(字符串);
- char *envp[ ]:字符指针数组,每一个字符指针指向一个环境变量(字符串);
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161264.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...