原帖由
250662772 于 2009-6-5 17:15:00 发表
freshow好像是用Inet方式读取,所以读取不出来,下面是一位大牛说的话
Inet好像是那啥啥封装出来的 按照ANSIC的规则遇到\0的话会自动中断读取 WinHTTP据说是根据返回的Contentlength读取字节 所以遇到上面那种带\0的不会中断
Inet指的是InternetReadFile?
InternetReadFile跟本地的ReadFile一样并没有识别读到的内容中的字符,因此并不会受到\0的影响。
其实MDecoder就是用InternetReadFile读取源文件内容的。
\0字符的影响不在于用InternetReadFile读取的过程,而在于用SetWindowsText显示的过程,在这个过程中把缓冲区中的源文件内容当成字符串,这才会被截断。
看MDecoder源码你就很清楚了,在循环InternetReadFile获取源文件后,必须先调用_ReplaceNULL函数(这个是MDecoder作者自己写的)将\0字符给改成空格,然后才调用SetWindowsText显示。
至于Freshow的过程,应该是类似这样的:
CString str1与RichEdit对象关联,InternetReadFile把原文件内容写入另一块缓冲区,然后用=赋值操作直接给CString对象赋值,这时就会被截断。