asp.net中的FileUpload控件抛出异常

时间:2012-11-28 11:26:20

标签: asp.net file-upload

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

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

  

该进程无法访问文件'E:\ MyProjectName \ App_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);

即使删除文件也无效,抛出相同的异常。

3 个答案:

答案 0 :(得分:2)

确保其他一些进程无法访问该文件。

每当您尝试上传文件时,可能会发生此错误,而不会将其从内存中明确删除。

所以试试这个:

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
}

答案 1 :(得分:0)

引用挂在内存中,如果您使用的是Visual Studio,请再次使用Clean Solution和Rebuild,如果您在IIS中,只需对应用程序进行回收。

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

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

答案 2 :(得分:0)

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