当前位置:编程学习 > C#/ASP.NET >>

Byte[] Copy

 IServiceProvider provider = (IServiceProvider)HttpContext.Current;
            HttpWorkerRequest wr = (HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));
            byte[] bs = wr.GetPreloadedEntityBody();
            long length = long.Parse(wr.GetKnownRequestHeader(HttpWorkerRequest.HeaderContentLength));
            int bytesRead = 0;  // 已读数据大小         
            int count = 4096;   // 分块大小
            if (!wr.IsEntireEntityBodyIsPreloaded())
            {
                using (FileStream fs = new FileStream(@"E:\1.txt", FileMode.Create, FileAccess.Write))
                {
                    while (wr.IsClientConnected() && !wr.IsEntireEntityBodyIsPreloaded() && bytesRead < length)
                    {
                        // 如果最后一块大小小于分块大小,则重新分块
                        if (length - count >= bytesRead)
                            bs = new byte[count];
                        else
                            bs = new byte[length - bytesRead];
                        // 分块读取
                        wr.ReadEntityBody(bs, bs.Length);
                        fs.Write(bs,0,bs.Length);
                        // 记录已上传大小
                        bytesRead += count;
                    }
                }
            }




求助为何byte copy过去后 文件二进制数据不同?不能打开啊?
--------------------编程问答-------------------- 用16进制编辑器或者文件比较工具(推荐UltraEdit带的UltraComparer)比较下看看。 --------------------编程问答--------------------
引用 1 楼 devmiao 的回复:
用16进制编辑器或者文件比较工具(推荐UltraEdit带的UltraComparer)比较下看看。

比较了 就是不同 不知道为什么 HttpWorkerRequest 的ReadEntityBody 读出来的不一样 --------------------编程问答-------------------- 怎么木有人啊~~~~~~~~~~~~~~~ --------------------编程问答-------------------- 木有人用过这个啊 ~~~ --------------------编程问答-------------------- 因为有些代码没有,所以有些东西不太清楚
我怀疑有个问题就是count ,这个变量应该随读取的变化而变化而不是一个固定值。
类似这样
count=wr.ReadEntityBody(bs, bs.Length);
                        fs.Write(bs,0,count);
                        // 记录已上传大小
                        bytesRead += count;
除非你确保每次明确无误读取4096个字节
最好自己调试一下。
--------------------编程问答--------------------
引用 5 楼 hdt 的回复:
因为有些代码没有,所以有些东西不太清楚
我怀疑有个问题就是count ,这个变量应该随读取的变化而变化而不是一个固定值。
类似这样
count=wr.ReadEntityBody(bs, bs.Length);
                        fs.Write(bs,0,count);
                        // 记录已上传大小
                        bytesRead += count;
除非你确保每次明确无误读取4096个字节
最好自己调试一下。


我就是自己调试了很久  读出来的二进制和源文件不一样。。count我回去在试试。我觉得应该不是这个问题,count的意思是当数据大于4096的时候 我每次都读4096字节,小与这个count的时候 我就读完剩下的字节。我用filestream write的时候 字节都没读错,我主要是想实现大文件带进度上传 试了很多用.net的fileupLoad大文件可以传 但是看不到进度。 ashx不知道为什么设置了maxRequestSize 不起作用。遇到大文件容易出错。然后看网上说用这个可以一块块的读,但是读的和源文件都不一样,不知道是不是编码有问题??
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,