3

WebClientを使用してファイルをダウンロードする方法について、同様の質問がいくつか寄せられていることを知っています。個々のファイルを完全にダウンロードできますが、さまざまなファイルをダウンロードしたいと思います。1〜6000ファイルのどこでも。現在のディレクトリに問題なくダウンロードできますが、ダウンロード元の場所に基づいて別のディレクトリにダウンロードする方法に困惑しています。ダウンロードする直前に、現在の作業ディレクトリを一時的に変更する必要がありますか?

そして、少し同じトピックで、ファイルをダウンロードする前にファイルが存在することを確認する方法に固執しています。空のファイルで帯域幅やディスクスペースを無駄にしたくありません。これまでのところ、次のようになっています。

            for (int x = 1; x <= 6000; x++)
            {
                pbsscount = x.ToString();

                // Used for downloading file
                string directoryName = textBox1.Text.ToString().Replace(":", "_");
                if (!Directory.Exists(textBox1.Text))

                    Directory.CreateDirectory(directoryName.Substring(7));
                string wholePBSSurl = textBox1.Text + "/" + "pb" + pbsscount.PadLeft(6, '0') + ".png";

                // Used for saving file, file name in directory
                string partPBSSurl = "pb" + pbsscount.PadLeft(6, '0') + ".png";

                Uri uri2 = new Uri(wholePBSSurl);

                //if (fileExists(wholePBSSurl))
                //{

                    // Initialize downloading info, grab progressbar info
                    WebClient webClient = new WebClient();
                    webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
                    webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);

                    // Save file to folder
                    //webClient.DownloadFileAsync(uri2, textBox1.Text + "/" + partPBSSurl);
                    webClient.DownloadFileAsync(uri2, partPBSSurl);
                //}
            }
4

2 に答える 2

1

それらをダウンロードする直前に、現在の作業ディレクトリを一時的に変更する必要がありますか?

2 番目のパラメーターはフル パスにすることができます@"C:\folder\file.png"。現在のディレクトリへの相対パスに問題がない場合は、コードを次のように変更するwebClient.DownloadFileAsync(uri2, directoryName + partPBSSurl);か、さらに適切に使用してくださいSystem.Path.Combine(directoryName, partPBSSurl)

サーバーがそれをサポートしている場合は、サイズを事前に知ることができます。参照: http ヘッダーからファイル サイズを取得する方法

空のファイルで帯域幅やディスク容量を無駄にしたくありません。

私はそれについて心配しません。パフォーマンスの低下は無視できます。

于 2012-08-07T04:02:22.260 に答える
0

現在のディレクトリを変更する必要はありません。2 番目のパラメーターとしてファイル パスを受け入れるDownloadFileAsyncのオーバーロードを既に使用しています。

partPBSSurlに、ディレクトリとファイル名の両方を含む宛先ファイルへの完全なパスが含まれていることを確認してください。

ファイルが存在しない場合に時間を無駄にしないようにするための 2 番目の質問に関して、たまたま最近同じ質問をしました。

WebClient でフェイル ファスト

最後に、最近 WebClient を拡張して、より単純な進行状況変更イベントを提供し、タイムアウトを変更できるようにしました。私はここにそのコードを提示しました:

https://stackoverflow.com/a/9763976/141172

于 2012-08-07T03:55:54.020 に答える