我想“下载”一个文件(更像是将其从一个目的地复制到另一个目的地),试图找到执行此操作的最佳方法。我已经尝试了xcopy等等。现在我正在尝试使用WebClient。我的代码如下:
WebClient client = new WebClient();
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
foreach (string drivePath in _destRepository.Destinations)
{
do
{
AsyncItem job = _repository.GetNextAsyncItem();
string source = job.DownloadLocation;
string destination = drivePath + job.Destination;
client.DownloadFileAsync(new Uri(source), destination);
} while (_repository.QueueCount < 1);
}
AsyncItem只是一个包含源和相对目标的自定义类(目标没有驱动器位置)。然后它将给出其驱动路径,然后客户端显示DownloadFileAsync。但是在Event Completed函数中我收到错误。 InnerException告诉我目标不存在?
当然,它还不存在,WebClient必须实现它。这让我相信WebClient可能不会创建文件夹结构?其中一些文件位于两层深处。
StackOverflow的意见是什么?
感谢。
答案 0 :(得分:0)
上面的简单答案是,WebClient不会为您创建文件夹结构。必须通过执行以下操作添加它们:
FileInfo dest = new FileInfo(destination);
if (!dest.Directory.Exists)
dest.Directory.Create();
但其次,最重要的是WebClient不支持CONCURRENT I / O操作。