JILAU_WHO_AM_I_Q234
JILAU_WHO_AM_I_Q234
2020-10-19 14:46
采纳率: 84.6%
浏览 122

C语言写一个简单的文件复制程序

先上代码

#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;
}

不知道为什么,第一行运行不了
求大佬指点

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

相关推荐