asp.net中的FileUpload控件引发异常

asp.net中的FileUpload控件引发异常,asp.net,file-upload,Asp.net,File Upload,我正在尝试使用C#读取Excel表格,最终用户将从fileUpload控件加载该表格 我正在编写代码,以便将文件保存在另一个按钮控件(上载)的事件处理程序中的服务器上。但当我点击上传按钮时,我得到了一个例外: 进程无法访问文件“E:\MyProjectName\App\u Data\sampledata.xlsx”,因为另一个进程正在使用该文件 以下是我在事件处理程序中使用的代码: string fileName = Path.GetFileName(file_upload.PostedFile

我正在尝试使用C#读取Excel表格,最终用户将从fileUpload控件加载该表格

我正在编写代码,以便将文件保存在另一个按钮控件(上载)的事件处理程序中的服务器上。但当我点击上传按钮时,我得到了一个例外:

进程无法访问文件“E:\MyProjectName\App\u Data\sampledata.xlsx”,因为另一个进程正在使用该文件

以下是我在事件处理程序中使用的代码:

string fileName = Path.GetFileName(file_upload.PostedFile.FileName);
string fileExtension = Path.GetExtension(file_upload.PostedFile.FileName);
string fileLocation = Server.MapPath("~/App_Data/" + fileName);
//if (File.Exists(fileLocation))
//    File.Delete(fileLocation);
file_upload.SaveAs(fileLocation);

即使删除文件也不起作用,会引发相同的异常。

引用挂起在内存中,如果使用Visual Studio,请尝试使用干净的解决方案并再次重建,如果使用IIS,只需对应用程序进行回收

要避免此问题,请尝试在使用文件后处置这些文件,例如:

using(var file= new FileInfo(path))
{
   //use the file
  //it will be automatically disposed after use
}

确保其他进程没有访问该文件。

每当您尝试上载文件时,如果不明确地将其从内存中删除,则可能会发生此错误

所以试试这个:

try
{
    string fileName = Path.GetFileName(file_upload.PostedFile.FileName);
    string fileExtension = Path.GetExtension(file_upload.PostedFile.FileName);
    string fileLocation = Server.MapPath("~/App_Data/" + fileName);
    //if (File.Exists(fileLocation))
    //    File.Delete(fileLocation);
    file_upload.SaveAs(fileLocation);
}
catch (Exception ex)
{
    throw ex.Message;
}
finally
{
    file_upload.PostedFile.InputStream.Flush();
    file_upload.PostedFile.InputStream.Close();
    file_upload.FileContent.Dispose();    
    //Release File from Memory after uploading
}

如果我正确理解了这个场景。 对于上传控制,我认为您不必为上传按钮编写代码。当您单击按钮时,上载控件已锁定文件并正在使用它,因此它已被一个进程使用。为按钮编写的代码将是另一个进程。
在此之前,请检查您的文件是否未在任何位置打开并等待编辑。

您是否认为没有Excel进程阻止它?(任务经理)感谢大家的回复;不,正如我在任务管理器中看到的,该文件没有在任何地方打开。