2 qq 33530738 qq_33530738 于 2016.01.22 10:53 提问

C# 使用ResponseStream下载文件部分,实际下载的文件部分比我要下载的文件部分小,什么原因?

C# 使用response.GetResponseStream下载文件某一部分,实际下载的文件部分 比 我要下载的文件部分小,什么原因?我要下载文件前50000000字节,实际下载只有49,909,760字节,代码如下:

 class Program
    {
        public static void Main(string[] args)
        {
            PartDownload("http://192.168.1.104/jkbd.exe", @"C:\Users\WYQ\Desktop\Test\split\dt1.sp", 0, 50000000);
        }
        private static void PartDownload(string url, string filePath, Int64 start, Int64 end)
        {
            FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.AddRange("bytes", start, end);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream responseStream = response.GetResponseStream();
            CopyStream(responseStream, fs);
            responseStream.Close();
            response.Close();
            fs.Close();
        }
        public static void CopyStream(Stream inputStream, Stream outputStream, int bufferSize = 512*200)
        {
            BufferedStream bufferedInputStream = new BufferedStream(inputStream, bufferSize);
            BufferedStream bufferedOutputStream = new BufferedStream(outputStream, bufferSize);
            byte[] bs = new byte[bufferSize];
            int len = 0;
            while ((len = bufferedInputStream.Read(bs, 0, bufferSize)) != 0)
            {
                bufferedOutputStream.Write(bs, 0, len);
            }
        }
    }

下载结果:
图片说明
只有49,909,760字节,而我要下载文件前50000000字节。这个是什么原因导致的?

3个回答

enpterexpress
enpterexpress   Rxr 2016.01.22 10:59

一个文件在不同的计算机上显示有可能不同

qq_33530738
qq_33530738 刚刚将copystream中bufferedstream去掉,直接使用stream读写,就没有数据丢失
2 年多之前 回复
qq_33530738
qq_33530738 我是在同一台计算机上做的,服务器是我电脑windows8.1的iis8
2 年多之前 回复
qq_33530738
qq_33530738   2016.01.22 11:11

我是在同一台计算机上做的,服务器是我电脑windows8.1的iis8

beau_lily
beau_lily   2016.01.22 11:12

如果不影响打开或者使用 这些差距可以忽略了
因为上传文件与下载文件是以字节流的方式进行 在进行字节流转换的过程中难免会丢失
就如同你用10/3.0会得到3.33333333333,然后你再乘以3 只能得到9.999999999而得不到10是一个道理

qq_33530738
qq_33530738 刚刚将copystream中bufferedstream去掉,直接使用stream读写,就没有数据丢失
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
git下载克隆部分文件代码的方法
git上的代码太多,而我只需要其中的部分文件,就需要使用sparsecheckout 方式下载。但是实际上这个方式也会很久,视git的总大小而定。参考:https://www.cnblogs.com/xilifeng/p/5225666.htmlhttps://stackoverflow.com/questions/23289006/on-windows-git-error-sparse-chec...
git下载github分支代码的部分文件
最近在学习CAS,要搭建服务,参考https://blog.yoodb.com/yoodb/article/detail/1275  下载cas-server服务端代码 发现只需要某一部分的代码(4.0.x版本下的cas-server-webapp目录),不想把整个分支代码都拉到本地。查了一下资料,记录一下本次操作: 本地新建文件夹cas-server-webapp,进入文件夹 右键Git B
github 下载 单个 部分 文件夹
github 怎么下载部分文件夹 在 github 上经常某个项目较大时,我只需要到处部分文件夹, 怎么办? 方法 – svn 使用 svn 比如我想导出https://github.com/studychen/DatePicker/这儿的 Demo 文件夹 Demo 文件夹的路径是https://github.com/studychen/DatePicker/tree/ma
如何下载github项目中的部分文件(文件夹)
https://minhaskamal.github.io/DownGit/#/home将你要下载的链接放进去即可。
tips: github 下载文件夹 |部分下载| 单个文件下载解决方案
刚刚在starkoverflow上找到了一些解决方案,虽然很久了还是回答下吧。 http://kinolien.github.io/gitzip 输入单个文件夹的路径,直接Download,不过答题人说不支持超过500个的文件夹下载。 https://github.com/VahidN/GitHubFolderDownloader 这个是windows下的一个工具,因为是mac
C# 使用IE下载文件总是下载HTML代码
这个不是代码的问题,在360浏览器上就能正常下载。下面是我下载使用的代码    #region 下载文件 //DESPath是物理路径         FileInfo fileInfo = new FileInfo(DESPath);         Response.Clear();         Response.ClearContent();         Response
responseStream
•以Stream对象的形式返回响应信息 •语法: –strValue = oXMLHttpRequest.responseStream; –变量,此属性只读,以AStream对象的形式返回响应信息。
Git的使用——提取某分支的部分文件
在某分支内工作时,master(也可以是其他分支)合并进了新的文件,此时工作的分支只想更新master中某几个新的文件,而不想通过复杂的合并(解决冲突)、复制粘贴等方式来操作; 1、切换到 Branch_1,进入对应的文件夹,打开git-bash; git checkout master file.cpp 引用:点击打开链接 问题: 1、这么操作是否会影响后期的追踪, 例如后期发现更
Git克隆部分文件
Git克隆部分文件需求只希望从Git仓库里取指定的文件或者文件夹出来。在SVN里面,这非常容易实现,因为SVN基于文件方式存储,而Git却是基于元数据方式分布式存储文件信息的,它会在每一次Clone的时候将所有信息都取回到本地,即相当于在你的机器上生成一个克隆版的版本库。解决方案在Git1.7.0以前,这无法实现,但是幸运的是在Git1.7.0以后加入了Sparse Checkout模式,这使得Ch
C#文件下载、文件分块下载实例(一)
一、简单下载方式使用WebClient /// /// 简单下载方式 /// 说明:对于大文件的下载,当前处理,会出现假死,长时间之后如果现在成功才相应 /// 不能用户断点处理 /// public static void Test1() { //string url = "http://www.imooc.com/video/11555"; string url =