我试图通过ASP.NET从服务器删除文件我试图像这样使用System.IO.File.Delete:
try
{
var filePath = System.Web.HttpContext.Current.Server.MapPath("C:/www/project/Images/" + landingCells.imageBytes);
if (System.IO.File.Exists(filePath))
{
System.IO.File.Delete(filePath);
}
}
catch
{
return false;
}
但每次返回false时,我都可以将文件写入服务器:
try
{
System.IO.File.WriteAllBytes("C:/www/project/Images/" + filePath, bytes);
}
catch
{
return false;
}
但是我无法删除文件,是文件路径和名称是否正确文件夹是否完全控制,我做错了什么?
这是我得到的错误:
An error occured: ‘C:/www/project/Images/ANW00012018053015551423458244a89b23-5ed7-42a3-a2fc-4b15a90fb3cf.jpg' is a physical path, but a virtual path was expected.
答案 0 :(得分:0)
我们使用Server.MapPath
的原因是我们不想对代码中的文件路径进行硬编码。
try
{
string fileName = "Sample.jpg";
var filePath = Server.MapPath("~/Images/" + fileName); // Do not pass byte array here
if (System.IO.File.Exists(filePath))
{
System.IO.File.Delete(filePath);
}
}
catch
{
// Do not swallow the exception. Instead, log them to persistant storage.
}
答案 1 :(得分:-1)
首先,非常危险的方法是硬编码文件夹的路径。如果管理员将应用程序移动到磁盘D怎么办?
恕我直言,问题在于:
var filePath = System.Web.HttpContext.Current.Server.MapPath("C:/www/project/Images/" + landingCells.imageBytes);
您正在尝试访问流,因此路径很长,看起来或多或少像“C:\ www \ project \ Images \ 0x00a00efe .............”(所以这里的路很长)。您应该使用文件名而不是imageBytes
属性。
此外,当您遇到类似问题时,捕获异常并记录它是非常有用的。