【发布时间】:2025-12-20 01:10:07
【问题描述】:
我正在使用一个简单的函数:-
while((br.Read(downbuffer, 0, downbuffer.Length)>0)
{
//Write the data in downbuffer to a file.
}
虽然它适用于文件(在 zip 文件下载中多次测试-http://citylan.dl.sourceforge.net/project/cric-scoreslive/v8.5-Live%20Cricket%20Scores%20Desktop%20App.zip),但当链接指向 HTML 文件时它不起作用(在 http://www.mediafire.com/?rc3kj22p1tb4vi9 上测试)。使用后面的链接,它只下载和写入大约 1 KB 的数据,而页面约为 60 KB。 如果它与没有被刷新或任何事情有关,想知道它是如何处理文件下载的?相关代码是这样的:-(在单独的线程中运行)-
wreq = (HttpWebRequest)WebRequest.Create(uri);
wres = wreq.GetResponse();
fs = new FileStream(totalpath, FileMode.Create);
bw = new BinaryWriter(fs);
br = new BinaryReader(wres.GetResponseStream());
while((onecount=br.Read(downbuffer, 0, downbuffer.Length)>0)
{
bw.Write(downbuffer, 0, onecount);
totalcount += onecount;
}
totalpath 指向一个文件,没什么特别的。 downbuffer 大小为 20 KB,我的网速约为 60 kBps(512kbps)。
【问题讨论】:
-
如果您只是将一个流复制到另一个流,为什么还要使用 BinaryWriter 和 Reader?
-
我脑子里还有其他事情,我需要这样开始。现在有点难以解释,但我只知道现在要做。
-
BinaryReader:将原始数据类型读取为特定编码中的二进制值。那不是你想要的不是吗? Read 和 Write 方法在底层流上可用。用 BinaryReader/Writer 包装是没有意义的。如果您真的想继续这种废话,请在循环后尝试
bw.Flush。 -
我也尝试过使用 bw.Flush(),HTML 页面也没有完全下载,第一个链接中的文件也没有在 while 循环中使用 bw.Flush (当然它存在于循环之外)。
-
您只使用
Write(byte[], int, int),该方法也可用于裸流。 BinaryWriter 没有任何作用。
标签: c# networking stream