a昊a 2020-10-19 14:46 采纳率: 66.7%
浏览 251

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

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

  • 写回答

1条回答 默认 最新

  • 懵逼学者 2021-09-24 11:02
    关注

    加一个头文件#incude window.h

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?