我正在尝试从asp.net应用程序中的目录中删除文件,但我总是得到一个异常,即该文件正由另一个进程使用,这可能是由应用程序本身引起的。
这是代码
TableCell cell = (TableCell)PhotoGalleryGridView.Rows[e.RowIndex].Cells[1];
DirectoryInfo photoGalleryDirectory = new DirectoryInfo(Server.MapPath("~/GalleryImages/"));
FileInfo[] imgFiles = photoGalleryDirectory.GetFiles();
for (int i = 0; i < imgFiles.Length; i++)
{
if (imgFiles[i].Name == cell.Text)
{
imgFiles[i].Delete();
}
}
我应该怎么做这个动作? 感谢
我将此实现为使用gridview中的OnRowDeleting方法的一部分,因此当我从数据库中删除照片时,它也会从网站的文件夹中删除照片。
protected void PhotoGalleryGridView_OnRowDeleting(object sender, GridViewDeleteEventArgs e)
{
TableCell cell = (TableCell)PhotoGalleryGridView.Rows[e.RowIndex].Cells[1];
DirectoryInfo photoGalleryDirectory = new DirectoryInfo(Server.MapPath("~/GalleryImages/"));
FileInfo[] imgFiles = photoGalleryDirectory.GetFiles();
for (int i = 0; i < imgFiles.Length; i++)
{
if (imgFiles[i].Name == cell.Text)
{
imgFiles[i].Delete();
}
}
}
我非常愿意接受任何其他有关此行动的想法。
答案 0 :(得分:1)
当您使用封装任何资源的对象时,您必须确保在完成对象时,调用对象的Dispose方法。
使用C#中的using statement
可以更轻松地完成此操作。 using语句简化了您必须编写以创建的代码,然后最终清理该对象。 using语句获取指定的资源,执行语句最后调用对象的Dispose方法来清理对象.......
答案 1 :(得分:0)
问题是我的localHost上运行的IIS Express服务。该过程称为iisexpress.exe,即使在我关闭网站并尝试手动删除它之后它也在使用该文件。在我回到使用asp.net开发服务器之后,问题就消失了。 谢谢大家。