ダウンロードにおけるレジューム機能とは,途中でダウンロードを中断した時に,
次回,残りの分を,同じファイルに追加してダウンロードすることです.
あまり使う機会はないとは思いますが,テストしてみました.
テストには,私のサイトのサンプルの [773] [03_FTP サーバからダウンロード ( TIdThreadComponent 使用 )]
を使用しました.そのサンプルの以下のイベントのコード部分だけ変更してテストしています.
http://mrxray.on.coocan.jp/Delphi/plSamples/773_Indy_FTPGetPut.htm#03
最初のダウンロードで,中断し,再度ダウンロードしています.
残りの分だけダウンロードしているので,プログレスバーが途中で止まっています.
必要であれば,適当に修正してください.
説明は省略します.これも必要であれば訊いてください.
動作確認環境は,Windows 7 U64(SP1) + Delphi XE Pro です.
//============================================================================= // SourcFile : ダウンロードするサーバ上のファイル名 // DestFile : ダウンロード後のファイル名 // TFileの使用には,usesにIOUtilsが必要 //============================================================================= procedure TForm1.IdThreadComponent1Run(Sender: TIdThreadComponent); var DestFile : String; begin DestFile := ExtractFilePath(Application.ExeName) + 'XXXXX';
try try if TFile.Exists(DestFile) then begin IdFTP1.Get(SourceFile, DestFile, False, True); end else begin IdFTP1.Get(SourceFile, DestFile); end; Panel2.Caption := 'ダウンロード終了'; except Panel2.Caption := 'ダウンロード中止'; end; finally //Terminateしてから次の作業をしないとファイルの中身消滅 IdThreadComponent1.Terminate; if IdFTP1.Connected then begin IdFTP1.Abort; IdFTP1.Disconnect; end; Screen.Cursor := crDefault; end; end;
TMemoryStream を使用する場合は,例えば次のようになるかも知れません.
procedure TForm1.IdThreadComponent1Run(Sender: TIdThreadComponent); var DestFile : String; AStream : TMemoryStream; begin DestFile := ExtractFilePath(Application.ExeName) + 'XXXXXX';
AStream := TMemoryStream.Create; if TFile.Exists(DestFile) then begin AStream.LoadFromFile(DestFile); end; AStream.Position := AStream.Size;
try try IdFTP1.Get(SourceFile, AStream, True); Panel2.Caption := 'ダウンロード終了'; except Panel2.Caption := 'ダウンロード中止'; end; finally AStream.SaveToFile(DestFile); //Terminateしてから次の作業をしないとファイルの中身消滅 IdThreadComponent1.Terminate; if IdFTP1.Connected then begin IdFTP1.Abort; IdFTP1.Disconnect; end; FreeAndNil(AStream); Screen.Cursor := crDefault; end; end;
|