⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_56141.htm

📁 vc
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<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&nbsp;&nbsp;&nbsp;&nbsp; //源文件<BR>//Enter the outfile name:<BR>//c.rar&nbsp;&nbsp;&nbsp;&nbsp; //目标文件<BR><BR>/////////////////或者///////////////<BR>//mycopy&nbsp;&nbsp;a.rar&nbsp;&nbsp;c.rar<BR><BR>/*<BR>我对小于10 M的文件直接分配内存复制,大于10 M的反复分配10 M内存复制.<BR>*/<BR><BR>// VC++ 6 编译通过&nbsp;&nbsp;-&gt;&nbsp;&nbsp; cl&nbsp;&nbsp;mycopy.c<BR>#include &lt;stdio.h&gt;<BR>#include &lt;conio.h&gt;<BR>#include &lt;stdlib.h&gt;<BR><BR>void main(int argc, char *argv[])<BR>{////////////////////////&nbsp;&nbsp;&nbsp;&nbsp; 输入控制&nbsp;&nbsp;&nbsp;&nbsp;//////////////////////<BR>&nbsp;&nbsp;&nbsp;&nbsp;FILE *in,*out;<BR>&nbsp;&nbsp;&nbsp;&nbsp;int iReturn;<BR>&nbsp;&nbsp;&nbsp;&nbsp;char infile[100],outfile[100];<BR>&nbsp;&nbsp;&nbsp;&nbsp;const int iReadSize = 1024;<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned char byBuffer[1024];<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned long&nbsp;&nbsp;SourceSize = 0,ObjectSize = 0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned long&nbsp;&nbsp;kilobyte,millionbyte;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;char *prog = argv[0];&nbsp;&nbsp;/* program name for errors */<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// argv[2]&nbsp;&nbsp; source&nbsp;&nbsp;, argv[3]&nbsp;&nbsp;&nbsp;&nbsp;object<BR>&nbsp;&nbsp;&nbsp;&nbsp;if ( argc == 1 )&nbsp;&nbsp;//向导输入<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;Enter the infile name:\n&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(&#34;%s&#34;,infile);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;Enter the outfile name:\n&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(&#34;%s&#34;,outfile);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( (in = fopen(infile,&#34;rb&#34;)) == NULL )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, &#34;%s: Can't open source!%s\n&#34;,prog, infile);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( (out = fopen(outfile,&#34;wb&#34;)) == NULL )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, &#34;%s: Can't open source!%s\n&#34;,prog, outfile);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else if ( argc == 3 )&nbsp;&nbsp;//直接输入&nbsp;&nbsp;如: mycopy&nbsp;&nbsp;a.rar&nbsp;&nbsp;c.rar<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( (in = fopen(*++argv, &#34;rb&#34;)) == NULL )&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, &#34;%s: Can't open source!%s\n&#34;,prog, *argv);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( (out = fopen(*++argv,&#34;wb&#34;)) == NULL )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, &#34;%s: Can't open object!%s\n&#34;,prog, *argv);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, &#34;%s: Error!!!%s\n&#34;,prog);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (ferror(stdout)) <BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, &#34;%s: error writing stdout\n&#34;, prog);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//////////////////&nbsp;&nbsp;处理文件复制&nbsp;&nbsp;&nbsp;&nbsp;/////////////////////<BR>&nbsp;&nbsp;&nbsp;&nbsp;fseek (in, 0, SEEK_END); // 文件指针到文件尾<BR>&nbsp;&nbsp;&nbsp;&nbsp;SourceSize=ftell (in); // 读取该位置,即文件大小<BR>&nbsp;&nbsp;&nbsp;&nbsp;rewind (in); // 让文件指针重新回到文件开始<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if ( SourceSize &gt;= 4294967295 )&nbsp;&nbsp; //&nbsp;&nbsp;&gt;=&nbsp;&nbsp;4G&nbsp;&nbsp; exit(1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;This is file too bigger!&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else <BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while ( !feof(in) )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iReturn = fread (byBuffer, sizeof(char), iReadSize, in); // 把文件读入缓冲区<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fwrite (byBuffer, sizeof(char), iReturn, out);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;///////////////&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;显示结果&nbsp;&nbsp;&nbsp;&nbsp;////////////// <BR>&nbsp;&nbsp;&nbsp;&nbsp;fseek (out, 0, SEEK_END); // 文件指针到文件尾<BR>&nbsp;&nbsp;&nbsp;&nbsp;ObjectSize=ftell (out); // 读取该位置,即文件大小<BR>&nbsp;&nbsp;&nbsp;&nbsp;rewind (out); // 让文件指针重新回到文件开始<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;kilobyte&nbsp;&nbsp;&nbsp;&nbsp;= SourceSize / 1024;<BR>&nbsp;&nbsp;&nbsp;&nbsp;millionbyte = SourceSize / ( 1024 * 1204 );<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;SourceSize %d&nbsp;&nbsp;byte -&gt; kilobyte %d K -&gt; millionbyte %d M\n&#34;,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SourceSize,kilobyte,millionbyte);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;kilobyte&nbsp;&nbsp;&nbsp;&nbsp;= SourceSize / 1024;<BR>&nbsp;&nbsp;&nbsp;&nbsp;millionbyte = SourceSize / ( 1024 * 1204 );<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;ObjectSize %d&nbsp;&nbsp;byte -&gt; kilobyte %d K -&gt; millionbyte %d M\n&#34;,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectSize,kilobyte,millionbyte);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//////////////////<BR>&nbsp;&nbsp;&nbsp;&nbsp;fclose(in);<BR>&nbsp;&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;&nbsp; 5s<BR>你改后程序&nbsp;&nbsp; 44M&nbsp;&nbsp;&nbsp;&nbsp;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 + -