大连房价多少钱一平米:C编程高手帮忙!(第二问题)

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/06 01:13:13
题目:在当前目录下有一个文本文件“a.text”将此文件中的信息复制到当前目录下另一文件“b.txt”。
要求:假如此程序最后生成可执行文件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);
}
}