删除目录中的特定文件

时间:2014-09-20 16:18:30

标签: c# asp.net

我以这种方式使用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       Description              PDFUrl
1       In this book...     ~/PDF/jQuery in Action.pdf

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

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

3 个答案:

答案 0 :(得分:0)

如果您拥有的只是ID,那么首先要根据ID从DB中获取PDFUrl。

然后:

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

来源:MSDN

此外,您应该确实使用parameterized queries,原因在OWASP SQL Injection Prevention Cheat Sheet上有解释。

答案 1 :(得分:0)

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

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();
}

答案 2 :(得分:0)

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

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