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はフォルダ構造を作成しないのではないかと思いました。これらのファイルのいくつかは、2つのレベルの深さにあります。

StackOverflowの意見は何ですか?

ありがとう。

4

1 に答える 1

0

上記の簡単な答えは「はい」です。WebClientはフォルダ構造を作成しません。これらは、次のようにして追加する必要があります。

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

しかし、第二に、そして最も重要なことに、WebClientは並行I/O操作をサポートしていません。

于 2012-11-14T09:45:57.670 に答える