我开发了一个 C# 应用程序,它需要通过 HTTP、FTP 以及有时还通过本地文件 (file://) 访问许多不同的内容源。
我希望有一种统一的方式来通过不同的协议访问这些文件,所以我选择了 WebClient 来执行此操作。
它适用于 MSDN 上记录的所有不同协议(FTP、HTTP、本地文件等),但随后出现问题......在几次成功请求后,我无法使用本地文件的 URI 访问任何文件(文件://c:\some_dir\somefile.ext)。
我已经检查了 URI 是否正确,如果我在浏览器中输入它,它会轻松打开文件。我已经认识到一件非常有趣的事情 - 它在开始时也适用于本地文件。如果我尝试使用 WebClient 加载本地文件的内容,那么一开始一切正常。
我的程序如下所示:
- 主线程启动
- 主线程上的一些初始化
- 多个线程从不同来源下载东西
- 等待所有线程完成
- 单线程处理下载的东西
正如我之前所描述的,如果我将 WebClient.DownloadData(url) 调用放在第一步中,它工作正常,但是当我尝试在第三步的任何线程中访问完全相同的 URI 时,它无法获得URI 以“file://”开头的任何本地文件。
我使用一个非常简单的代码来下载/获取本地文件:
WebClient wc = new WebClient();
data = wc.DownloadData(url);
我想知道会出现什么问题...也许我在前面的步骤中或在阻止我访问本地文件的并发线程中设置了一些东西?在前面的步骤中,我从 FTP 服务器和通过 HTTP 下载内容,也许这会导致问题?如果我在主线程的开头尝试,我可以轻松访问任何本地文件。访问 FTP 内容时,我还设置了凭据。也许这会影响我以后的请求?