您的位置:首页 > 编程语言 > C#

C#中对文件的上传下载操作总结(下载后点击删除按钮总是提示进程被占用)

2014-03-17 18:39 567 查看
最近做项目时总是用到上传下载功能,网上搜了一下,这种功能很简单,所以没有把它当作一个难点,没想到后来经常碰到文件资源被占用的问题,文件“。。。。。。\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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐