处理DirectoryNotFoundException错误

时间:2014-12-04 17:30:01

标签: c# asp.net

我提供从我的网站到用户的文件下载。当文件存在时,它工作正常。但是如果因任何原因删除了该文件,我在Visual Studio中会收到以下错误:

An exception of type 'System.IO.DirectoryNotFoundException' occurred in
mscorlib.dll but was not handled in user code

用户只需在网站上看到一个JSON字符串。

我使用此优惠:

var result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new StreamContent(
      new FileStream(mediaFile.FilesystemLocation, FileMode.Open));

mediaFile.FilesystemLocation就是这样:

public virtual string FilesystemLocation
{
     get { return Path.Combine(FilesystemRoot, Id + "." + Extension); }
}

我尝试将整个事情放在try / catch块中,但之后它丢失了对其他类的所有引用。

所以我的问题是,如何处理此代码并防止出现此错误?

理想情况下,我只是想向用户显示一条消息,"找不到文件,请联系您的管理员"或类似的东西。

谢谢!

1 个答案:

答案 0 :(得分:2)

System.IO.File.Exists将成为你的朋友。在设置result.Content之前请先调用它。如果文件不存在,该方法将返回false,您可以相应地调整逻辑。

var filepath = mediaFile.FilesystemLocation;

if (!File.Exists(filepath))
{
    return new HttpResponseMessage(404);
}
else{
   var result = new HttpResponseMessage(HttpStatusCode.OK);

   //just in case file has disappeared / or is locked for open, 
   //wrap in try/catch
   try
   {
       result.Content = new StreamContent(
          new FileStream(filepath, FileMode.Open));
   }
   catch
   {
       return new HttpResponseMessage(500);           
   }

    return result;
}