C语言文件复制

Python033

C语言文件复制,第1张

不应对非文本文件使用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

}

C语言复制文件主要由三种办法,你可以根据自己的知识选用一个

方法1)利用C语言的二进制读写函数

自己用fopen打开源文件和目标文件,然后用循环读写实现复制

方法2)利用操作系统的文件复制函数

例如Windows就有如下API函数可以复制文件

BOOL CopyFile(

LPCTSTR lpExistingFileName, // name of an existing file

LPCTSTR lpNewFileName, // name of new file

BOOL bFailIfExists // operation if file exists

)

第一个参数是用来存放当前要处理文件的路径

第二个参数是用来存放用户指定的新路径。

第三个参数它是用来判断用户指定的新路径是否已经存在要存放的路径,如果为TRUE,则新路径中已经存在该文件了,该函数调用失败,否则就调用成功。

方法3:C语言调用操作系统的copy命令

首先#include<stdlib.h>

然后 程序中 调用 system(“这里写 copy的完整命令”);

有两种方法可以使用

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

}