缺乏权限时.Net WebClient无声地失败

时间:2012-04-06 21:10:39

标签: .net webclient

当被要求将文件下载到进程没有写入权限的文件夹时,

WebClient以静默方式失败(不会抛出异常):

using (WebClient webClient = new WebClient())
{
    webClient.DownloadFile(url, outputPath);
}
if (!File.Exists(outputPath)) logger.Warn("Could not download file.");

代码在LOCAL SERVICE下运行的Windows服务中以每分钟一次的循环运行,尝试写入已删除权限的文件夹。当我恢复目标文件夹的适当权限时,下载开始成功。

这是一种已知行为吗?这是一个错误吗?是否正确检查输出文件是否存在以确定DownloadFile是否成功?

1 个答案:

答案 0 :(得分:0)

  

这是一种已知行为吗?

没有。根据{{​​3}}:

  

在中间层应用程序中使用此方法时,例如   在ASP.NET页面中,如果帐户在哪个下,您将收到错误   应用程序执行没有访问该文件的权限。

基本上,如果您运行此代码的帐户没有对目标文件夹的写入权限,您将获得异常。


  

这是一个错误吗?

我不这么认为。


  

正在检查输出文件是否存在正确的方法   确定DownloadFile是否成功?

不,因为如果您没有给定文件夹的权限,documentation将返回false,因为文档明确指出:

  

如果调用者没有足够的权限来阅读   指定的文件,不抛出异常,方法返回false   不管路径的存在。

所以你可能搞砸了一些权限。例如,如果您对该文件夹具有写入权限但没有读取权限,则DownloadFile将成功,但File.Exists将返回false。