3

C#を使用したファイルのダウンロードを理解するために、この記事を参照しています。

コードは従来の方法を使用して次のようなストリームを読み取ります

((bytesSize = strResponse.Read(downBuffer, 0, downBuffer.Length)) > 0

ダウンロードするファイルを複数のセグメントに分割して、別々のセグメントを並行してダウンロードしてマージできるようにするにはどうすればよいですか?

using (WebClient wcDownload = new WebClient())
{
    try
    {
        // Create a request to the file we are downloading
        webRequest = (HttpWebRequest)WebRequest.Create(txtUrl.Text);
        // Set default authentication for retrieving the file
        webRequest.Credentials = CredentialCache.DefaultCredentials;
        // Retrieve the response from the server
        webResponse = (HttpWebResponse)webRequest.GetResponse();
        // Ask the server for the file size and store it
        Int64 fileSize = webResponse.ContentLength;

        // Open the URL for download 
        strResponse = wcDownload.OpenRead(txtUrl.Text);
        // Create a new file stream where we will be saving the data (local drive)
        strLocal = new FileStream(txtPath.Text, FileMode.Create, FileAccess.Write, FileShare.None);

        // It will store the current number of bytes we retrieved from the server
        int bytesSize = 0;
        // A buffer for storing and writing the data retrieved from the server
        byte[] downBuffer = new byte[2048];

        // Loop through the buffer until the buffer is empty
        while ((bytesSize = strResponse.Read(downBuffer, 0, downBuffer.Length)) > 0)
        {
            // Write the data from the buffer to the local hard drive
            strLocal.Write(downBuffer, 0, bytesSize);
            // Invoke the method that updates the form's label and progress bar
            this.Invoke(new UpdateProgessCallback(this.UpdateProgress), new object[] { strLocal.Length, fileSize });
        }
    }
4

1 に答える 1

1

それを実現するには、いくつかのスレッドが必要です。まず、最初のダウンロードスレッドを開始し、Webクライアントを作成して、ファイルサイズを取得します。次に、ダウンロード範囲ヘッダーを追加するいくつかの新しいスレッドを開始できます。ダウンロードされたパーツを処理し、終了時に新しいダウンロードパーツを作成するロジックが必要です。

http://msdn.microsoft.com/de-de/library/system.net.httpwebrequest.addrange.aspx

WebClientの実装が時々奇妙な振る舞いをすることに気づいたので、本当に「大きな」ダウンロードプログラムを書きたいのであれば、独自のHTTPクライアントを実装することをお勧めします。

ps:ユーザーsvickに感謝します

于 2012-09-20T19:07:49.393 に答える