不应对非文本文件使用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);fsize0;fsize-=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;
}
#includestdio.h
#includestdlib.h
int main(int argc, char *argv[])
{
// char s1[100],s2[100];
FILE *p1,*p2;
char ch;
if(argc!=3)
{
printf("ming ling cuowu!");
exit(1);
}
if(argc==3)
{
p1=fopen(argv[1],"r");
p2=fopen(argv[2],"w");
if(p1==NULL||p2==NULL)
{
printf("wenjian bu cunzai!");
exit(1);
}
ch=fgetc(p1);
while(ch!=EOF)
{
fputc(ch,p2);
ch=fgetc(p1);
}
printf("kaobei chenggong!");
}
return 0;
}
要用命令行的模式执行程序
可以加我百度
以二进制打开源文件进行读取(二进制可以拷贝任何文件),以二进制打开目标文件进行写入,读取源文件的一个字符,如果feof()表明已经到达文件末尾,如果没有到达源文件末尾,则将该字符写入目标文件。loop...
int file_copy(char *oldname, char *newname)
//接收文件名为输入,把oldname文件拷贝到newname
{ FILE *fold, *fnew;
int c;
//打开源文件
if ((fold = fopen(oldname, "rb")) == NULL)
return -1;
//打开目标文件
if ((fnew = fopen(newname, "wb")) == NULL)
{ fclose(fold); //如果目标文件空,关闭并返回
return -1;}
while (1)
{ c= fgetc(fold);
if (!feof(fold))
fputc(c, fnew);
else
break;
}
fclose(fold);
fclose(fnew);
}
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命令
首先#includestdlib.h
然后 程序中 调用 system(“这里写 copy的完整命令”);
首先是使用库函数
比如下面代码
void ourStrCopy(char S1[] , char S2[]){ strcpy(S1, S2); //该函数还有另一个版本可以按长度截取 }
还有一个函数是memcpy,这个是内存拷贝,原型是
void memcpy(void *dest, const void *src, size_t n); 需要注意的是这个函数第一个和第二个指针都是void型且第二个指针不能被修改,第三个参数是需要拷贝的内存长度按字节记。
然后是用指针引用,注意这个并非赋值,而是引用,这种操作需要注意内存。
char s1[] = "abcdefg";//定义一组字符串char *s2 = s1;//按照指针拷贝字符串
第三种方法就是直接赋值了
void outStrCopy(char s1[] , char s2[]){ int len1 = strlen(s1);//获取第一个字符串的长度 int len2 = strlen(s2);//获取第二个字符串的长度 int len = 0; //字符串总长度 if(len1 = len2){ len = len2; //选择COPY的长度 }else{ len = len1; } for(int i = 0 ; i len ; i++){ s1[i] = s2[i]; //实现数据拷贝 }}
这样写就行了:
#includestdio.h
void main()
{
char pBuffer[8];
FILE *f1, *f2;
f1 = fopen("file1", "rb"); // 以二进制形式读,file1是文件名
f2 = fopen("file2", "wb"); // 以二进制形式写,file2是文件名
while (!feof(f1))
{
fread(pBuffer, 1, 8, f1); // 每次读8个字节
fwrite(pBuffer, 1, 8, f2); // 每次写8个字节
}
fclose(f1);
fclose(f2);
}