StreamReader ReadBlock висит на бинарных файлах - PullRequest
2 голосов
/ 19 августа 2010

У меня есть небольшой класс, который принимает POST из браузера, который содержит загрузки файлов. Я использую StreamReader для чтения. Я читаю заголовок, затем, когда я получаю тело, я получаю длину содержимого и создаю массив этого размера, а затем stream.ReadBlock() для этого:

char[] buffer = new char[contentLength];
stream.ReadBlock(buffer, 0, contentLength);
String body = new string(buffer);

Когда я запускаю это и отправляю текстовый файл, он работает нормально. Тем не менее, я пробовал как ZIP-файл, так и MP3-файл, и ни один из них не работает. Он просто висит на stream.ReadBlock() звонке.

Сначала я попробовал это на Ubuntu 10.04 с Mono 2.6.7 (мой проект MonoDevelop настроен на использование .net 3.5). И я только что убедился, что то же самое происходит в Windows7, запустив один и тот же проект в VisualStudio 2010 и .net 3.5. Я пробовал отправлять сообщения как из Firefox, так и из Chrome.

Кто-нибудь знает, почему это происходит? Благодаря.

Я также пытался использовать BinaryReader вместо StreamReader:

byte[] bytes = reader.ReadBytes(contentLength);

но это заканчивается тем, что он звонит, несмотря ни на что. Это потому, что я использую StreamReader для чтения заголовка POST, а затем использую BinaryReader для чтения тела?

Ответы [ 2 ]

4 голосов
/ 19 августа 2010

StreamReader для текста данных.Вы не должны использовать его для двоичных данных - вы должны использовать BinaryReader или просто Stream.

1 голос
/ 19 августа 2010

Использование StreamReader не подходит для двоичного файла. Он будет выполнять все виды кодирования текста и вообще (потенциально) все испортить.

Как только вы определили, что файл, с которым вы работаете, является двоичным, вы должны использовать объект Stream непосредственно для чтения (части) файла. Таким образом, вам не придется иметь дело с кодировками, которые портят содержимое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...