因为我用WebClient可以下载到web上的一张图片,但是使用HttpWebRequest却没办法下载到,取得的流的字节长度总是比WebClient直接下载下来的数组要短!
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
            Stream responseStream = response.GetResponseStream();
            byte[] bytes = new byte[1500];   
            int m = responseStream.Read(bytes,0 , 1200);
            Console.WriteLine(m);
            因为我是先不知道返回的有多大,所以先声明了个比较大的数组! 返回的m值 比
            WebClient Getpic = new WebClient();
            byte[] ImageBytes = Getpic.DownloadData("http://2452.753.105.196/iode.php");
            Console.WriteLine(ImageBytes.Length);
             比这样取得的值要小一百多!

解决方案 »

  1.   

    int m = responseStream.Read(bytes,0 , 1200);
    你这里读取了 1200 个字节  是否图片大于这个数?
    理论上应该是相同的。
    你直接取长度看看:
    Stream responseStream = response.GetResponseStream();
    byte[] bytes = new byte[responseStream.Length];   
    int m = responseStream.Read(bytes,0 , bytes.Length);
      

  2.   

    responseStream.Length   正是因为我试了这个不行,所以才写一个比这张图片的字节数大的数字!使用responseStream.Length 将会抛出异常,提示这个流不支持查询我要下载的是一张BMP格式的图片,以前曾经下载过JPG的都是没问题的!
    不知道为什么BMP为什么这么麻烦!
      

  3.   

    我也遇到过相同的问题,下载下来的文件大小一样,但就是打不开,后来改写为:
    **/
            /// <summary>
            /// 下载服务器文件至客户端        /// </summary>
            /// <param name="URL">被下载的文件地址,绝对路径</param>
            /// <param name="Dir">另存放的目录</param>
            public void Download(string URL, string Dir)
            {
                WebClient client = new WebClient();
                client.Credentials = CredentialCache.DefaultCredentials;
                string fileName = URL.Substring(URL.LastIndexOf("/") + 1);  //被下载的文件名
                //fileName = fileName.Substring()
                string Path = Dir + fileName;   //另存为的绝对路径+文件名            try
                {
                    WebRequest myre = WebRequest.Create(URL);
                    //WebResponse webRes = myre.GetResponse();
                    //long lngFileLength = webRes.ContentLength;                //Stream str = webRes.GetResponseStream();
                    //StreamReader reader = new StreamReader(str);
                    //byte[] myByte = new byte[(int)lngFileLength];                client.DownloadFile(URL, Path);
                    //Stream str = client.OpenRead(URL);
                    //StreamReader reader = new StreamReader(str);
                    //byte[] mbyte = new byte[100000];
                    //int allmybyte = (int)myByte.Length;
                    //int startmbyte = 0;                //FileStream fstr = new FileStream(Path, FileMode.OpenOrCreate, FileAccess.Write);//Append只能和写一起用。   
                    //fstr.Write(myByte, 0, allmybyte);
                    //fstr.Close();
                    //str.Close();
                    //    while (allmybyte > 0)
                    //    {
                    //        int m = str.Read(mbyte, startmbyte, allmybyte);
                    //        if (m == 0)
                    //            break;
                    //        fstr.Write(mbyte, 0, startmbyte);
                    //        startmbyte += m;
                    //        allmybyte -= m;
                    //    }                MessageBox.Show("OK");
                    //FileStream fs = new FileStream(URL, FileMode.Open, FileAccess.Read);
                    //BinaryReader r = new BinaryReader(fs);
                    //byte[] mbyte = r.ReadBytes((int)fs.Length);
                    //fs.Write(mbyte, 0, (int)fs.Length);
                    //FileStream fstr = new FileStream(Path, FileMode.OpenOrCreate, FileAccess.Write);                //fstr.Write(mbyte, 0, (int)fs.Length);
                    //fstr.Close();            }
                catch(Exception exception)
                {
                    //MessageBox.Show(exp.Message,"Error");
                }
            }
                    //WebResponse webRes = myre.GetResponse();
                    //long lngFileLength = webRes.ContentLength;                //Stream str = webRes.GetResponseStream();
                    //StreamReader reader = new StreamReader(str);
                    //byte[] myByte = new byte[(int)lngFileLength];                client.DownloadFile(URL, Path);
    }
      

  4.   

    使用循环读取的方法啊Stream responseStream = response.GetResponseStream();
    MemoryStream mStream = new MemoryStream();
    byte[] buffer = new byte[1024];
    int bytesRead = responseStream.Read(buffer, 0, buffer.Length);
    while (bytesRead > 0)
    {
        mStream.Write(buffer,0,buffer.Length);
        bytesRead = responseStream.Read(buffer, 0, buffer.Length);
    }
    fs.Close();
    str.Close();
    response.Close(); 
      

  5.   

    byte[] buffer = new byte[1024]; 你还不是事先不知道大小!!!