掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
大容量ファイルをCopyFile (ID:38612)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
CopyFileEx関数を使う手もあります。 http://cult-drang.com/program/tips/memo/api_copyfileex.html private { Private 宣言 } F_bCancel: Boolean; ... //MoveFileWithProgress, CopyFileExから呼ばれるコールバックルーチン function CopyProgressRoutine( iTotalFileSize: int64; iTotalBytesTransferred: int64; iStreamSize: int64; iStreamBytesTransferred: int64; dwStreamNumber: DWORD; dwCallbackReason: DWORD; hSourceFile: THandle; hDestinationFile: THandle; lpData: Pointer ): DWORD; stdcall; begin if (iTotalFileSize > 0) then begin //0で割るエラーを回避 Form1.Caption := Format('コピーしています %d%%', [Trunc(iTotalBytesTransferred / iTotalFileSize * 100)]); end else begin Form1.Caption := 'コピーしています'; end; Application.ProcessMessages; Result := PROGRESS_CONTINUE; end; procedure TForm1.Button1Click(Sender: TObject); begin //コピー元ファイルを選択 if (OpenDialog1.Execute) then begin //コピー先ファイルを指定 SaveDialog1.FileName := OpenDialog1.FileName; if (SaveDialog1.Execute) then begin F_bCancel := False; if (CopyFileEx( PChar(OpenDialog1.FileName), PChar(SaveDialog1.FileName), @CopyProgressRoutine, nil, @F_bCancel, //特に必要がなければnilでもOK 0 )) then begin Caption := 'コピーは成功しました'; end else begin Caption := 'コピーは失敗しました'; end; end; end; end; procedure TForm1.Button2Click(Sender: TObject); begin F_bCancel := True; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.