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