📄 subject_56141.htm
字号:
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:jackyxio 回复日期:2003-10-15 17:59:47
<br>内容://///////////////感觉有写问题大家帮忙看看改改!!!////////////////<BR><BR>/////////////////只在相同目录下复制///////////<BR>/////////////////如下使用/////////////////////<BR>//Enter the infile name:<BR>//a.rar //源文件<BR>//Enter the outfile name:<BR>//c.rar //目标文件<BR><BR>/////////////////或者///////////////<BR>//mycopy a.rar c.rar<BR><BR>/*<BR>我对小于10 M的文件直接分配内存复制,大于10 M的反复分配10 M内存复制.<BR>*/<BR><BR>// VC++ 6 编译通过 -> cl mycopy.c<BR>#include <stdio.h><BR>#include <conio.h><BR>#include <stdlib.h><BR><BR>void main(int argc, char *argv[])<BR>{//////////////////////// 输入控制 //////////////////////<BR> FILE *in,*out;<BR> int iReturn;<BR> char infile[100],outfile[100];<BR> const int iReadSize = 1024;<BR> unsigned char byBuffer[1024];<BR> unsigned long SourceSize = 0,ObjectSize = 0;<BR> unsigned long kilobyte,millionbyte;<BR> <BR> char *prog = argv[0]; /* program name for errors */<BR> <BR> // argv[2] source , argv[3] object<BR> if ( argc == 1 ) //向导输入<BR> {<BR> printf("Enter the infile name:\n");<BR> scanf("%s",infile);<BR> printf("Enter the outfile name:\n");<BR> scanf("%s",outfile);<BR> if ( (in = fopen(infile,"rb")) == NULL )<BR> {<BR> fprintf(stderr, "%s: Can't open source!%s\n",prog, infile);<BR> exit(1);<BR> }<BR> if ( (out = fopen(outfile,"wb")) == NULL )<BR> {<BR> fprintf(stderr, "%s: Can't open source!%s\n",prog, outfile);<BR> exit(1);<BR> }<BR> }<BR> else if ( argc == 3 ) //直接输入 如: mycopy a.rar c.rar<BR> {<BR> if ( (in = fopen(*++argv, "rb")) == NULL ) <BR> { <BR> fprintf(stderr, "%s: Can't open source!%s\n",prog, *argv);<BR> exit(1);<BR> } <BR> if ( (out = fopen(*++argv,"wb")) == NULL )<BR> {<BR> fprintf(stderr, "%s: Can't open object!%s\n",prog, *argv);<BR> exit(1);<BR> } <BR> }<BR> else<BR> {<BR> fprintf(stderr, "%s: Error!!!%s\n",prog);<BR> exit(1);<BR> }<BR> <BR> if (ferror(stdout)) <BR> {<BR> fprintf(stderr, "%s: error writing stdout\n", prog);<BR> exit(1);<BR> }<BR><BR> ////////////////// 处理文件复制 /////////////////////<BR> fseek (in, 0, SEEK_END); // 文件指针到文件尾<BR> SourceSize=ftell (in); // 读取该位置,即文件大小<BR> rewind (in); // 让文件指针重新回到文件开始<BR> <BR> if ( SourceSize >= 4294967295 ) // >= 4G exit(1)<BR> {<BR> printf("This is file too bigger!");<BR> exit(0);<BR> }<BR> else <BR> {<BR> while ( !feof(in) )<BR> {<BR> iReturn = fread (byBuffer, sizeof(char), iReadSize, in); // 把文件读入缓冲区<BR> fwrite (byBuffer, sizeof(char), iReturn, out);<BR> }<BR> }<BR> /////////////// 显示结果 ////////////// <BR> fseek (out, 0, SEEK_END); // 文件指针到文件尾<BR> ObjectSize=ftell (out); // 读取该位置,即文件大小<BR> rewind (out); // 让文件指针重新回到文件开始<BR> <BR> kilobyte = SourceSize / 1024;<BR> millionbyte = SourceSize / ( 1024 * 1204 );<BR> printf("SourceSize %d byte -> kilobyte %d K -> millionbyte %d M\n",<BR> SourceSize,kilobyte,millionbyte);<BR> <BR> kilobyte = SourceSize / 1024;<BR> millionbyte = SourceSize / ( 1024 * 1204 );<BR> printf("ObjectSize %d byte -> kilobyte %d K -> millionbyte %d M\n",<BR> ObjectSize,kilobyte,millionbyte);<BR> //////////////////<BR> fclose(in);<BR> fclose(out);<BR>}<BR><BR>改了,测试了100多M的文件,成功!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Zerg 回复日期:2003-10-15 19:14:29
<br>内容:谢谢!<BR><BR>我的原来程序 44M 5s<BR>你改后程序 44M 0.5s<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:杨立 回复日期:2003-10-18 18:40:25
<br>内容:一般而言,缓冲区大小1k到8k可达到最佳性能,太大的缓冲区效果可能反而不太好。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -