HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
int sizeToRead = (int)response.ContentLength;
int sizeRead = 0;
int buffer = 1;
byte[] bytes = new byte[sizeToRead];
while (sizeToRead > 0)
{
int rs = sizeToRead > buffer ? buffer : sizeToRead;
stream.Read(bytes, sizeRead, rs);
sizeToRead -= rs;
sizeRead += rs;
}
stream.Close();
System.IO.File.WriteAllBytes("c:\\tmp\\b.mp3", bytes);
上記のコードがあります。その目的は、mp3 ファイルをどこかからダウンロードして、c:\tmp\filename に保存することです。そして、それは完璧に機能します。
ただし、バッファ サイズを 1 以外の値 (たとえば 512) に変更すると、ダウンロードした mp3 ファイルがかすれてしまいます。プログラムによってダウンロードされたファイルとブラウザ経由でダウンロードされたファイルを比較したところ、プログラムによってダウンロードされた mp3 ファイルの一部のバイトが 0 に設定されていることがわかりました (ファイル サイズは同じと考えられます)。
さらに、上記のコードを使用して mp3 ファイルをダウンロードするときに、フィドラーを使用してトラフィックを監視しました。プログラムとブラウザからダウンロードした mp3 を比較しましたが、すべてのバイトが同じです。
したがって、問題はストリームリーダーまたは読み取りプロセス内にあると思います。なぜそれが起こるのか誰か知っていますか?バッファサイズを1に設定せずに解決する方法は?