首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StreamReader ReadBlock在二进制文件上挂起

StreamReader ReadBlock在二进制文件上挂起
EN

Stack Overflow用户
提问于 2010-08-19 04:00:23
回答 2查看 1.5K关注 0票数 2

我有一个小类,它接受来自包含文件上传的浏览器的POST。我正在使用StreamReader来读取它。我读取头,然后当我读到正文时,我得到内容长度,并创建一个该大小的数组,然后对其执行stream.ReadBlock()

代码语言:javascript
复制
char[] buffer = new char[contentLength];
stream.ReadBlock(buffer, 0, contentLength);
String body = new string(buffer);

当我运行它并发布一个文本文件时,它工作得很好。但是,我同时尝试了ZIP文件和MP3文件,这两个文件都不起作用。它只是挂起了stream.ReadBlock()调用。

我首先在Ubuntu10.04上使用.net 2.6.7 (我的MonoDevelop项目设置为使用Mono3.5)。我刚刚通过在VisualStudio 2010和.net 3.5中运行相同的项目,验证了在Windows7上也发生了同样的事情。我尝试过在Firefox和Chrome上发布帖子。

有人知道为什么会发生这种事吗?谢谢。

我还尝试使用BinaryReader而不是StreamReader:

代码语言:javascript
复制
byte[] bytes = reader.ReadBytes(contentLength);

但不管怎样,它最终都会挂在电话上。是不是因为我先使用StreamReader读取帖子的头部,然后再使用BinaryReader读取正文?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-19 04:04:15

StreamReader用于文本数据。你不应该在二进制数据上使用它--你应该使用BinaryReader或者只使用Stream

票数 4
EN

Stack Overflow用户

发布于 2010-08-19 04:05:12

使用StreamReader不适合二进制文件。它会做各种各样的文本编码工作,通常(可能)会把事情搞砸。

一旦确定正在处理的文件是二进制文件,就应该直接使用Stream对象来读取(文件的一部分)。那样的话,你就不必处理乱七八糟的编码了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3516176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档