📄 subject_58914.htm
字号:
<p>
序号:58914 发表者:二极管 发表日期:2003-11-04 21:16:53
<br>主题:Read和ReadHuge的问题
<br>内容:请教各位:<BR><BR>CFile类的Read和ReadHuge函数的能读取最大值是多少?<BR>Read的最大值是64K,ReadHuge可以大于64K(就是64×1024=65535)<BR><BR>我想问一下ReadHuge最大可以到多少<BR><BR>今天开了个char sbuf[2048000],然后ReadHuge(sbuf, 2048000)不能用啊<BR><BR>好像char 数组就不能达到这么大,那char数组最大能做到多少呢?<BR><BR>最关键的问题是大文件怎么读出来啊,谢谢!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:michael 回复日期:2003-11-04 22:38:31
<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>
<font color=red>答案被接受</font><br>回复者:大句 回复日期:2003-11-04 22:48:57
<br>内容:ReadHuge函数的Huge型指针来对传递的缓冲区进行寻址,因此可以读写大于65535字节的巨型数据。ReadHuge函数需要巨型的缓冲区,你这样做char sbuf[2048000],有点不妥。你可以用Windows的API函数GobalAlloc()来创建缓冲区。<BR><BR>给个例子:<BR>{ <BR>CString Namel(”data1.dat”);<BR>CString Name2(”data2.dat”);<BR>CFile MyFilel(Namel,CFile::modeRead);<BR>CFile MyFile2(Name2,CFile::modeCreate|CFile::modeWrite);<BR>DWORD Length=MyFile1.GetLength();<BR>void far*p=GlobalAlloc(0,Length);<BR>if(p=NULL)<BR>{<BR>AfxMessageBox(”Alloc memory error!”);<BR>}<BR>MyFile1.ReadHuge(p,Length);<BR>MyFile2.ReadHuge(p,Length);<BR>MyFile1.Close();<BR>MyFile2.Close();<BR>AfxMessageBox(”File Copy Succeed!”);<BR>}<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-11-05 00:07:20
<br>内容:你是在WIN16还是WIN32平台下?WIN16就如2楼所说。如是WIN32的话,ReadHuge就是Read呀。不要开那么大的数组吧,太夸张了点,在WIN32中是32位的线性地址,要用大数组最好是用new来分配动态内存。只要内存分配成功,Read是没问题的。
<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-11-05 09:05:56
<br>内容:读一个大文件可以这样循环去读<BR><BR>CFile sourceFile;<BR>sourceFile.Open(filename,CFile::modeRead);<BR>CFile *newfile=new CFile(strname,CFile::modeCreate|CFile::modeWrite);<BR>char *buffer=new char[1024];<BR>long nRead(0),readlen(0);<BR>do<BR>{<BR> ZeroMemory(buffer,1024);<BR> nRead=sourceFile->Read(buffer,1024);<BR> if(nRead!=0)<BR> {<BR> readlen+=nRead;<BR> newfile->Write(buffer,nRead);<BR> }<BR>}while(nRead!=0) ;<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-11-05 20:07:38
<br>内容:谢谢各位了!
<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 + -