0

我想“下载”一个文件(更像是将其从一个目的地复制到另一个目的地),以尝试找到执行此操作的最佳方法。我已经尝试过 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 的观点是什么?

谢谢。

4

1 回答 1

0

上面的简单答案是肯定的,WebClient 不会为您创建文件夹结构。必须通过执行以下操作来添加它们:

FileInfo dest = new FileInfo(destination);
if (!dest.Directory.Exists)
    dest.Directory.Create();

但其次也是最重要的 WebClient 不支持 CONCURRENT I/O 操作。

于 2012-11-14T09:45:57.670 回答