現在、FTPサーバーから大きなファイルをダウンロードするアプリケーションを作成しています。すべてが小さなファイル(< 50 MB)でもうまく動作しますが、私がダウンロードしているファイルは、主に2 GBを超えるほど大きくなります。WebClient/FTP経由で大きなファイルをダウンロードする際の問題
私はDownload FileAsync()とリストシステムを使用してWebクライアントを試してきましたが、サイズのためにこれらのファイルを次々とダウンロードしています。
DownloadClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgress);
DownloadClient.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadCompleted);
private void FileDownload()
{
DownloadClient.DownloadFileAsync(new Uri(@"ftp://" + RemoteAddress + FilesToDownload[0]), LocalDirectory + FilesToDownload[0]));
}
private void DownloadProgress(object sender, DownloadProgressChangedEventArgs e)
{
// Handle progress
}
private void DownloadCompleted(object sender, AsyncCompletedEventArgs e)
{
FilesToDownload.RemoveAt(0);
FileDownload();
}
それは進歩が報告され、各ファイルの後にDownloadCompleted
火災され、それらはすべて1枚ずつダウンロードされ、小さなファイルにこの方法を絶対に正常に動作します。私が大きなファイルに直面しているこの問題は、問題なしで最初のダウンロードを開始しますが、それ以降は何もしません。 DownloadCompleted
イベントは何らかの理由で決して発生しません。 WebClient
は、ファイルのダウンロードが完了したことを知らないようです。これは、このイベントを使用してFilesToDownloadリストの次のダウンロードを開始するときの問題です。
私はまたWebClient.DownloadFile
とfor
ループを使用して同期して、FilesToDownload
リストを循環させようとしました。最初のファイルを正しくダウンロードし、2回目のダウンロードを開始するときに例外が発生します。「基本接続が閉じられました:受信時に予期しないエラーが発生しました」
最後に、私はedtFTPnetを使用してFTP経由でこれを試みましたが、私はダウンロード速度の問題に直面しています(すなわち、ダウンロードはWebClient
でフルスピードになり、edtFTPnetライブラリ)。
どのような考えですか?私はここでアイデアが不足していることを認めなければならない。
バイトを取得することによってこれを行うためにファイルストリームまたはMemoryStreamを作成してみてください。また、GIGSまたはMBの – MethodMan
を参照してlargeの定義を「large」と言います。 – Xeaz
オペレーティングシステムが2GBのファイルサイズで4GBの制限があることを覚えている.NET 4.0を使用している場合Microsoft .NET 4.0でファイルサイズの制限を変更しましたので、intサイズをlongまたはInt64タイプに変更する必要がありますあなたが使っている正確な例..データのギグも常に長くかかるでしょう。スワップファイルとtmpファイルを覚えておいてください。これは単なるストレートコピーではありません。ターゲットメディアに利用可能なストレージスペースが必要です – MethodMan