2012-11-28 43 views
0

我想读取一个使用C#的Excel工作表,它将由fileUpload控件的最终用户加载。asp.net中的FileUpload控件抛出异常

我正在写我的代码来保存另一个按钮控件(上传)的事件处理程序中的服务器上的文件。因为它正被另一个进程使用,但是当我点击上传按钮,我得到这个异常:

该进程无法访问该文件“\ MyProjectName \ App_Data文件\ sampledata.xlsx E”。

这里是我在事件处理程序使用了代码:

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

你确定没有Excel进程阻止它吗? (任务管理器) –

+0

感谢所有人的回复;不,该文件没有打开任何地方,因为我可以在任务管理器中看到。 – nks

回答

0

引用挂在内存中,如果您使用Visual Studio,请尝试使用Clean Solution和Rebuild,如果您在IIS中,则只需执行应用程序的回收。

为了避免这个问题,请尝试,一旦你用它们来处理文件,是这样的:

using(var file= new FileInfo(path)) 
{ 
    //use the file 
    //it will be automatically disposed after use 
} 
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 
} 
0

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