先上代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NOCHANGE 3
#define CHANGE 4
#define MAX 20
int main(int argc, char* argv[])
{
char cTemp[MAX];//用于暂时存放读取的数据
char cP_File_Name[MAX];//存放输入的文件名
FILE* f_In, * f_Out;//输入与输出的文件指针
char c_Change[] = "cd \\";//用于切换目录的字符串
if (argc <= 2)//如果命令行参数小于等于2,即只有程序本身和源文件名则报错退出程序
{
printf("Argument Input Error\n");
exit(0);
}
if ((f_In = fopen(argv[1], "rb")) == NULL)//以二进制只读打开文件
{
printf("Open %s Fail\n",argv[1]);
exit(0);
}
strncpy(cP_File_Name,c_Change,5);//复制“cd”字符串到数组
cP_File_Name[5] = '\0';//将末尾增加字符串结束标志
strcat(cP_File_Name,argv[2]);//连接输入的字符串,形成 "cd 目录"的格式
system(cP_File_Name);//使用system函数切换至指定目录
if (argc == NOCHANGE)//如果参数只有3个,即复制时不改变文件名
{
if ((f_Out = fopen(argv[1],"wb")) == NULL)//在该目录下创建相同文件名文件
{
printf("Open %s Fail\n", argv[1]);
exit(0);
}
while (fread(cTemp, MAX, 1, f_In) > 0)//读入源文件数据直到无法输入
{
fwrite(cTemp, MAX,1,f_Out);//不断写入数据
}
}
else if (argc == CHANGE)//如果参数个数为4,即复制文件时改变文件名
{
strcpy(cP_File_Name, argv[3]);//将输入的新文件名复制给数组
if ((f_Out = fopen(cP_File_Name, "wb")) == NULL)//以二进制方式创建新文件
{
printf("Open %s Fail\n", argv[1]);
exit(0);
}
while (fread(cTemp, MAX, 1, f_In) > 0)//读入数据直到无法输入
{
fwrite(cTemp, MAX, 1, f_Out);//不断写入数据
}
if (fclose(f_In) || fclose(f_Out))//关闭文件只要其中一个失败即退出程序
{
fprintf(stderr, "Error in closing files\n");
exit(0);
}
}
return 0;
}
我用一个小一点的程序测试了,那个system()函数切换不了目录,不知道为什么,求大佬叫我
下面是测试的小程序
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
system("cd \\C_Source_file");//切换目录
system("chdir");//显示当前目录
return 0;
}
不知道为什么,第一行运行不了
求大佬指点