删除目录中的特定文件
本文关键字:文件 删除目录 | 更新日期: 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);
但与此同时,我正在为这个文件的数据库中插入一个Id
、Description
和PDFUrl
:
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);
,但这只会从数据库中删除Id
、Description
和PDFUrl
。
我的问题是:如何在从数据库中删除评论的同时删除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();
}