2

当被要求将文件下载到进程没有写权限的文件夹时, WebClient静默失败(不抛出异常):

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

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

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

4

1 回答 1

0

这是一种已知的行为吗?

不,根据文档

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

因此,如果您在其下运行此代码的帐户没有目标文件夹的写入权限,那么基本上您将得到一个异常。


它是一个错误吗?

我不这么认为。


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

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

如果调用者没有足够的权限来读取指定的文件,则不抛出异常,并且无论路径是否存在,该方法都返回 false。

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

于 2012-04-06T21:16:18.090 回答