C#中對文件的上傳下載操作總結(下載後點擊刪除按鈕總是提示進程被佔用)

 最近做項目時總是用到上傳下載功能,網上搜了一下,這種功能很簡單,所以沒有把它當作一個難點,沒想到後來經常碰到文件資源被佔用的問題,文件“。。。。。。\Download\20142m10d417991a346.docx”正由另一進程使用,因此該進程無法訪問此文件。下載代碼如下:
protected void BtnTextLoad_Clik(string filePath, string fileName)
        {
            if (filePath != "" && fileName != "")
            {
                string a = Server.MapPath(filePath);//路徑
                // string fileNames = fileName + a.Substring(a.LastIndexOf("."), a.Length - a.LastIndexOf("."));
                string filepath = a.Substring(0, a.LastIndexOf("view")) + filePath;
                System.IO.FileInfo fileInfo = new System.IO.FileInfo(filepath);
                if (fileInfo.Exists == true)
                {
                    const long ChunkSize = 102400;//100K 每次讀取文件,只讀取100K,這樣可以緩解服務器的壓力
                    byte[] buffer = new byte[ChunkSize];
                    Response.Clear();
                    System.IO.FileStream iStream = System.IO.File.OpenRead(filepath);
                    long dataLengthToRead = iStream.Length;//獲取下載的文件總大小
                    Response.ContentType = "application/octet-stream";
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
                    while (dataLengthToRead > 0 && Response.IsClientConnected)
                    {
                        int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//讀取的大小
                        Response.OutputStream.Write(buffer, 0, lengthRead);
                        Response.Flush();
                        dataLengthToRead = dataLengthToRead - lengthRead;
                    }
                    Response.Close();                 }
            }
            else
            {
                Response.Write("<script type=\"text/javascript\">alert(\"下載的文件不存在!\");\"</script> "); 
            }

 

查看代碼,明明已經有Response.Close();來結束響應了。後來經過查找資料,發現還需關閉剛剛創建的iStream,即在Response.Close後面添加上iStream.Close().這麼一個細節,花費了我近一天的時間。
iStream 
發佈了19 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章