我正在尝试使用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);
即使删除文件也无效,抛出相同的异常。
答案 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)
如果我已正确了解情景。 对于上传控件,我认为你不必编写上传按钮的代码。当您单击按钮时,您的上传控件已锁定文件并使用它,因此它已被一个进程使用。为按钮编写的代码将是另一个过程。 在此之前,请检查您的文件是否未在任何地方打开并等待编辑。