大连房价多少钱一平米:C编程高手帮忙!(第二问题)
来源:百度文库 编辑:查人人中国名人网 时间:2024/05/06 01:13:13
要求:假如此程序最后生成可执行文件fcopy.exe,可在命令行操作系统通过 c:\>fcopy a.txt b.txt执行上述操作
备注:希望高手可以帮忙用C编程出来,小弟不胜感激!
#include <stdlib.h>
#include <stdio.h>
#define BUFLEN 30000
void datacopy(FILE *rbfp,FILE *wbfp);
void main(int argc,char *argv[])
{
FILE *rbfp,*wbfp;
if (argc!=3)
{
printf("Usage:SMPL8_3 SourceFile stFile");
return;
}
rbfp = fopen(argv[1],"rb");
if (rbfp==NULL)
{
printf("Source File can't be Found!");
return;
}
wbfp = fopen(argv[2],"wb");
if (wbfp==NULL)
{
printf("Dest File can't be Create!");
return;
}
datacopy(rbfp,wbfp);
fclose(rbfp);
fclose(wbfp);
}
/*算法一:以字符方式进行复制
void datacopy(FILE *rbfp,FILE *wbfp)
{
int ch1;
ch1 = fgetc(rbfp);
while (ch1!=EOF)
{
fputc(ch1,wbfp);
ch1 = fgetc(rbfp);
}
} */
/*算法二之方法一:测试文件结束
void datacopy(FILE *rbfp,FILE *wbfp)
{
char *buffer;
long readbytes;
buffer = (char *)malloc(BUFLEN);
while (!feof(rbfp))
{
readbytes = fread(buffer,1,BUFLEN,rbfp);
fwrite(buffer,1,readbytes,wbfp);
}
free(buffer);
}
*/
/*算法二之方法二:通过文件长度控制
void datacopy(FILE *rbfp,FILE *wbfp)
{
char *buffer;
long readbytes;
long filelength;
long copycount;
long i;
buffer = (char *)malloc(BUFLEN);
fseek(rbfp, 0L, SEEK_END);
filelength = ftell(rbfp);
rewind(rbfp);
copycount = ((filelength%BUFLEN==0)?
(filelength/BUFLEN):(filelength%BUFLEN+1));
for (i=0;i<copycount;i++)
{
readbytes = fread(buffer,1,BUFLEN,rbfp);
fwrite(buffer,1,readbytes,wbfp);
}
free(buffer);
}
上面的程序是有问题的,复制后文件并不完全一样。
看这个:
#include <stdio.h>
#include <errno.h>
int main(int argc, char *argv[])
{
if( argc!=3 )
{
printf("Usage:\n\t%s <SrcFile> <DstFile>\n", argv[0]);
return -1;
}
char data;
FILE *pSrc, *pDst;
if( (pSrc=fopen(argv[1], "rt"))==NULL )
{
printf("Open file %s error : %s\n", argv[1], strerror(errno));
return -1;
}
if( (pDst=fopen(argv[2], "wt"))==NULL )
{
printf("Open file %s error : %s\n", argv[2], strerror(errno));
fclose(pSrc);
return -1;
}
data = fgetc(pSrc);
while( !feof(pSrc) )
{
fputc( data, pDst);
data = fgetc(pSrc);
}
fclose(pSrc);
fclose(pDst);
return 0;
}
/* fcopy.c */
#include "stdio.h"
main(int argc,char* argv[])
{
FILE *in,*out;
if(argc>2)
{
if((in=fopen(argv[1],"r"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
if((out=fopen(argv[2],"w"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
while(!feof(in)) fputc(fgetc(in),out);
fclose(in);
fclose(out);
}
}