我有一个小类,它接受来自包含文件上传的浏览器的POST。我正在使用StreamReader来读取它。我读取头,然后当我读到正文时,我得到内容长度,并创建一个该大小的数组,然后对其执行stream.ReadBlock():
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:
byte[] bytes = reader.ReadBytes(contentLength);但不管怎样,它最终都会挂在电话上。是不是因为我先使用StreamReader读取帖子的头部,然后再使用BinaryReader读取正文?
发布于 2010-08-19 04:04:15
StreamReader用于文本数据。你不应该在二进制数据上使用它--你应该使用BinaryReader或者只使用Stream。
发布于 2010-08-19 04:05:12
使用StreamReader不适合二进制文件。它会做各种各样的文本编码工作,通常(可能)会把事情搞砸。
一旦确定正在处理的文件是二进制文件,就应该直接使用Stream对象来读取(文件的一部分)。那样的话,你就不必处理乱七八糟的编码了。
https://stackoverflow.com/questions/3516176
复制相似问题