我在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);