C语言编程实现:将一个文件的内容复制到另一个文件。(详细点的,考试用。)谢谢!

C语言编程实现:将一个文件的内容复制到另一个文件。(详细点的,考试用。)谢谢!,第1张

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#ifdef BUFSIZ

#undef BUFSIZ

#define BUFSIZ 4096

#endif

/*

使用格式:mcpy 源文件 目标文件

且目标文件和源文件不能一样,否则会清空文件内容,

源文件必须存在,目标文件可存在也可不存在,如果存在,内容会被覆好旁盖掉。

*/

int main(int argc,char **argv)

{

char buf[BUFSIZ]

int msglen

if(argc!=3||strcmp(argv[1],argv[2])==0)

/*argc:命令行模式下,输入的橡消参数数目。

  argv:第一个参数的首地址。*/

{

fprintf(stderr,"********************************\n\n")

fprintf(stderr,"Please usage:%s source_file destination_file\nAnd source_file is different from destination_file\n\n",argv[0])

fprintf(stderr,"********************************\n")

exit(0)

}

FILE *fp_src,*fp_des

if((fp_src=fopen(argv[1],"r"))==NULL)

/*为空,则打开失败*/

{

fprintf(stderr,"open %s failed!\n",argv[1])

exit(1)

}

if((fp_des=fopen(argv[2],"w"))==NULL)

/*为空,则打开或创建失败*/

{

fprintf(stderr,"open/create %s 友如橡failed!\n",argv[2])

exit(2)

}

while(fgets(buf,BUFSIZ,fp_src)!=NULL)

/*从源文件读,读失败或到达文件尾部时,返回NULL*/

{

if(fputs(buf,fp_des)==EOF)

/*写入目标文件,写入失败时,返回EOF;若成功返回写入的字节数*/

{

fprintf(stderr,"copy %s to %s failed!\n",argv[1],argv[2])

exit(3)

  }

}

printf("copy %s to %s successful!\n",argv[1],argv[2])

return 0

}

有两种方法可以使用

1 调用函数system(),可以执行系统shell命令,从而实现复制文件功能。

比如在windows下可以

system("copy src dst /Y")

其中src是源文件,dst为目标文件,/Y开关表示不需要交互,强行复制。

如果在linux下,则可颤搭以使用

system("cp src dst")

其中src 和dst与之前含义相同冲判。

2 可以自行写函数进行复制

利用C语言的文件 *** 作函数,打开文件,读取源文件写入目标文件,最终关闭即可。

参考代码如下

#include <stdio.h>

void file_copy(char *src, char *dst)

{

    FILE *fp1, *fp2

    int c

    fp1 = fopen(src, "rb")

    fp2 = fopen(dst, "wb")//打开文件

    if(fp1 == NULL || fp2 == NULL)//错误处理

   茄判拿 {

        printf("open file failed\n")

        if(fp1) fclose(fp1)

        if(fp2) fclose(fp2)

    }

    

    while((c = fgetc(fp1)) != EOF)//读字节

        fputc(c, fp2) //写数据

    fclose(fp1)//关闭文件

    fclose(fp2)

    

    return 0

}

不应对非文本文件使用fgetc等易受干扰的函数,建议用fread,fwrite读写二敏郑进制文件唤衫

#include "stdio.h"

/* 保护硬盘,绝对不要一个字节一个字节复制 */

#define SIZEOFBUFFER 256*1024L /* 缓冲区大小,默认为256KB */和拿腔

long filesize(FILE *stream)

{

long curpos, length

curpos = ftell(stream)

fseek(stream, 0L, SEEK_END)

length = ftell(stream)

fseek(stream, curpos, SEEK_SET)

return length

}

int copyfile(const char* src,const char* dest)

{

FILE *fp1,*fp2

int fsize,factread

static unsigned char buffer[SIZEOFBUFFER]

fp1=fopen(src,"rb")

fp2=fopen(dest,"wb+")

if (!fp1 || !fp2) return 0

for (fsize=filesize(fp1)fsize>0fsize-=SIZEOFBUFFER)

{

factread=fread(buffer,1,SIZEOFBUFFER,fp1)

fwrite(buffer,factread,1,fp2)

}

fclose(fp1)

fclose(fp2)

return 1

}

int main()

{

copyfile("file1.txt","file2.txt")

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12477038.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存