删除目录中的特定文件

本文关键字:文件 删除目录 | 更新日期: 2023-09-27 18:23:35

我正在使用FileUpload控件将PDF文件上传到文件夹中,方法如下:

string pdfFilPath = Path.GetFileName(FileUpload1.PostedFile.FileName.ToString());
string pdfPath = Server.MapPath(@"~/PDF/" + pdfFilPath);
FileUploadFoto.PostedFile.SaveAs(pdfPath);

但与此同时,我正在为这个文件的数据库中插入一个IdDescriptionPDFUrl

SqlCommand cmd = new SqlCommand("INSERT INTO Book(Description, PDFUrl) 
  VALUES (''' + textBoxDescription.Text + "','" + "~/PDF/" + pdfFilPath + "')", conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();

如果我从数据库中选择所有列,并在GridView上显示它们,它们显示如下:

ID描述PDFUrl1在这本书中~/PDF/jQuery in Action.PDF

现在,如果我想删除书评,我所做的就是("DELETE FROM Book Where Id='" + textBoxId.Text + "'", conn);,但这只会从数据库中删除IdDescriptionPDFUrl

我的问题是:如何在从数据库中删除评论的同时删除PDF文件?

删除目录中的特定文件

不过别忘了,在删除文件之前应该先检查文件是否存在,否则会引发错误。如果用户刷新回发,则可能发生这种情况。

if (File.Exists(Server.MapPath(PDFUrl))
{
    File.Delete(Server.MapPath(PdfUrl));
}

如果你只有ID,那么首先进行一个查询,根据ID从DB中获取PDFUrl。

然后:

FileInfo fi = new FileInfo(Server.MapPath(PDFUrl));
fi.Delete;

来源:MSDN

此外,您应该真正使用参数化查询,原因在OWASP SQL注入防止作弊表中有说明。

您可以创建一个方法,从目录中删除文件,然后从数据库中删除文件。

public void DeleteFile(string id)
{
FileInfo fi = new FileInfo(Server.MapPath(PDFUrl));
fi.Delete;
SqlComand cmd = new SqlComand("DELETE FROM Book Where Id='" + textBoxId.Text + "'", conn);
cmd.ExecuteNonQuery();
}