因为它正由另一个进程的FileStream无法访问该文件(FileStream can't

2019-07-03 16:40发布

我在ASP.NET Web应用程序新我碰到这个问题来了。

我有一个页面磨片有下载之前存储在一个SharePoint页面template.xls的按钮。 我下载的方法,它的工作就好了。 有问题的模板被保存在那里它应该是,在我的web应用程序的位置,在我的本地IIS文件夹上。 问题是打开这个文件给最终用户。 我需要一个弹出显示给用户,这样他就可以打开/保存该template.xls我使用了以下内容:

//path on my local IIS where the file is located after the download
string _strFolderApp = "~/Arq/";
string _strFullFolderApp = _strFolderApp + _strFileName;
string apPath = System.Web.Hosting.HostingEnvironment.MapPath(_strFullFolderApp);

FileStream _FileStream = new FileStream(apPath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
// Writes a block of bytes to this stream using data from a byte array.
_FileStream.Write(_contentFile, 0, _contentFile.Length);

//opens the file
Response.Clear();
Response.AddHeader("content-disposition", "attachment; filename=" + _strFileName);
Response.ContentType = "";
Response.TransmitFile(apPath);
Response.Flush();
File.Delete(apPath);
Response.End();
# endregion

// close file stream
_FileStream.Close();

我在网上搜索,所有的答案使用FileShare.ReadWrite结束了所以无论过程将正常工作。 但它不是为我工作,因为当代码达到Response.TransmitFile(apPath); 我得到一个异常弹出,并没有显示。 例外:

该进程无法访问该文件“C:\的Inetpub \ wwwroot的\ MyWebApp \文件\ TemplateSharePoint.xlsx”,因为它正由另一个进程使用。

请任何帮助,将不胜感激:)

编辑 代码更新

if (_flgSPSDownload)
        {
            System.IO.FileStream _FileStream = new System.IO.FileStream(apPath,System.IO.FileMode.Create, System.IO.FileAccess.Write);
            _FileStream.Write(_contentFile, 0, _contentFile.Length);
            _FileStream.Close();


            Response.Clear();
            Response.AddHeader("content-disposition", "attachment; filename=" + _strFileName);
            //Set the appropriate ContentType.
            Response.ContentType = "Application/x-msexcel";
            Response.TransmitFile(apPath);
            Response.Flush();
            //Write the file directly to the HTTP content output stream.
            Response.WriteFile(apPath);
            //File.Delete(apPath);

            //Process.Start(_strDestinationPath + "//" + _strFileName);

Answer 1:

从我可以告诉,你打开的文件流,然后尝试再次打开它,关闭它之前。

该文件的初始开启:

FileStream _FileStream = new FileStream(apPath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);

Response.TransmitFile(apPath); 

似乎试图再次打开该文件。

我建议叫

_FileStream.Close();

之前调用TransmitFile



Answer 2:

我已经通过另一种方式来解决这个问题

我打开窗口任务管理器,发现我的项目我的dll文件运行

倍数(我的意思是存在的它复印件)我删除它们比我的问题就解决了



文章来源: FileStream can't access the file because it's being used by another process