我是ASP.NET的Web App的新手,我遇到了这个问题。
我有一个页面,有一个按钮可以下载一个以前存储在SharePoint页面上的template.xls。我有下载方法,它工作正常。在我的本地IIS上,在我的Web应用程序所在的文件夹上保存了所讨论的模板。问题是向最终用户打开此文件。我需要向用户显示弹出窗口,因此他可以打开/保存此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,因此两个过程都可以正常工作。但这对我不起作用,因为当代码达到 wenders.transmitfile(appath); 时,我会得到异常,并且弹出窗口不显示。例外:
该过程无法访问文件'c: inetpub wwwroot mywebapp file 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);
从我能告诉的,您正在打开文件流,然后在关闭之前尝试再次打开它。
文件的初始打开:
FileStream _FileStream = new FileStream(apPath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
和
Response.TransmitFile(apPath);
似乎正在尝试再次打开文件。
我建议打电话
_FileStream.Close();
致电TransmitFile
之前。
我已经通过另一种方式解决了这个问题
我打开窗口任务管理器并发现我的项目的DLL文件正在运行
倍数(我的意思是存在它的副本)我将它们删除,比我的问题解决