1. 程式人生 > >Windows Mobile Web方式下載檔案

Windows Mobile Web方式下載檔案

以前所使用的下載檔案,都是通過webService + WSE進行的,而WebService是以XML為載體的,這樣,在下載檔案的時候,必然包含著一些沒有的結構資訊,從而也就增加了實際要下載的檔案的大小,對於移動裝置而言,網路流量是非常寶貴的,為了節約流量,所以寫了一個通過WebRequest和WebResponse完成網路檔案下載的方法,改方法的好處是流量比較小,但缺點是,要被現在的檔案必須放到Internet網路上,這樣便對檔案的安全性和下載使用者的可控性帶來一定的影響,下面是實現的程式碼

/// <summary>
        /// 從指定的URL以二進位制方式現在檔案
        /// </summary>
        /// <param name="fileURL">檔案所存放的Internet地址</param>
        /// <returns>成功下載後,檔案在本地存放的位置,如果下載失敗,則返回""</returns>
        private string DownLoadFile(string fileURL)
        {
            StreamReader rdr = null;
            FileStream wrtr = null;
            string localFileName = string.Empty;
            try
            {
                Cursor.Current = Cursors.WaitCursor;
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(fileURL);
                req.Method = "GET";

                HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
                long len = resp.ContentLength;
                Stream respStream = resp.GetResponseStream();
                localFileName = @"/Program Files/" + fileURL.Substring(fileURL.LastIndexOf("/") + 1);

                 wrtr = new FileStream(localFileName, FileMode.Create);

                byte[] inData = new byte[4096];

                int bytesRead = respStream.Read(inData, 0, inData.Length);
                while (bytesRead > 0)
                {
                    wrtr.Write(inData, 0, bytesRead);
                    bytesRead = respStream.Read(inData, 0, inData.Length);
                }
                //判斷下在是否成功
                System.IO.FileInfo fi = new FileInfo(localFileName);
                if (fi.Length != len)
                    localFileName = string.Empty;
                fi = null;
               
            }
            catch (Exception ep)
            {
                MessageBox.Show(ep.Message);
            }
            finally
            {
                if(rdr != null)
                    rdr.Close();
                if(wrtr != null)
                    wrtr.Close();
                Cursor.Current = Cursors.Default;
            }
            return localFileName;
        }