咨询Indy的FTP控件下载进度条问题

山水无言 2010-07-18 10:04:07
FTP控件的相关属性和事件都设置好了。不知什么原因,上传文件时进度条工作正常,而下载文件时,进度条没有动静。帮助我看看。

从网上查询说要设置AWorkMode,以确定是处于接收数据状态还是发送数据状态,是不是这个原因?怎么设置?

//联用这几个事件:
//注意要判断一下AWorkMode,确定是处于接收数据状态还是发送数据状态。
OnWorkBegin // ProgressBar1.Max:=AWorkCountMax;
OnWork // ProgressBar1.Position:=AWorkCount;
OnWorkEnd // ProgressBar1.Position:=0;

//上载
stepIT := 1;
ProgressBar1.StepBy(1);
ProgressBar1.Step:=1;
ProgressBar1.Visible:=true;
with IdFTP1 do
begin
Host := '130.140.40.201';
User := 'my_ftp';
Password := 'my_pass';
if Connected then Disconnect;
Connect();
Put(本地文件名,服务器文件名);
if Connected then Disconnect;
end;
ProgressBar1.Visible:=false;


//下载
if CheckBox1.Checked=true then
begin
begin
with IdFTP1 do
begin
Host := '130.140.40.201';
User := 'my_ftp';
Password := 'my_pass';
if Connected then Disconnect;
Connect();
stepIT := 1;
ProgressBar1.StepBy(1);
ProgressBar1.Step:=1;
ProgressBar1.Visible:=true;

Get(服务器文件名,本地文件名,True);
ProgressBar1.Visible:=false;
...全文
273 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
KK_Yip 2011-06-12
  • 打赏
  • 举报
回复
6楼的内容,怎么看不到?
阿三 2010-07-19
  • 打赏
  • 举报
回复

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient, IdFTP, ComCtrls, IdFTPCommon;

type
TForm1 = class(TForm)
IdFTP1: TIdFTP;
IdAntiFreeze1: TIdAntiFreeze;
Edit1: TEdit;
Button1: TButton;
ProgressBar1: TProgressBar;
OpenDialog1: TOpenDialog;
Button2: TButton;
procedure IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
procedure IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
procedure IdFTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
AbortTransfer: Boolean;
TransferrignData: Boolean;
BytesToTransfer: LongWord;
STime: TDateTime;
public
{ Public declarations }
end;

var
Form1: TForm1;
AverageSpeed: Double = 0;
implementation

{$R *.dfm}

procedure TForm1.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
TransferrignData := true;
AbortTransfer := false;
STime := Now;
if AWorkCountMax > 0 then
begin
ProgressBar1.Max := AWorkCountMax;
end else
begin
ProgressBar1.Max := BytesToTransfer;
end;
AverageSpeed := 0;
end;

procedure TForm1.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
Var
S: String;
TotalTime: TDateTime;
H, M, Sec, MS: Word;
DLTime: Double;
begin
TotalTime := Now - STime;
DecodeTime(TotalTime, H, M, Sec, MS);
Sec := Sec + M * 60 + H * 3600;
DLTime := Sec + MS / 1000;
if DLTime > 0 then
AverageSpeed := (AWorkCount/1024)/DLTime;

S := FormatFloat('0.00 KB/s', AverageSpeed);

if AbortTransfer then IdFTP1.Abort;
ProgressBar1.Position := AWorkCount;
//tvPlanets.DataController.Values[DownloadID,2] := FormatFloat('#,##0',AWorkCount/1024)+'/'+FormatFloat('#,##0',BytesToTransfer/1024);
AbortTransfer := false;
application.ProcessMessages;
end;

procedure TForm1.IdFTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
BytesToTransfer := 0;
TransferrignData := false;
ProgressBar1.Position := 0;
AverageSpeed := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if opendialog1.Execute then
begin
Edit1.Text := opendialog1.FileName;
if Trim(Edit1.Text)='' then
begin
MessageBox(Handle,'请选择要上传的文本文件','提示',MB_ICONINFORMATION);
Exit;
end;
if not IdFTP1.Connected then
begin
IdFTP1.Username := 'ftpuser';
IdFTP1.Password := 'ftpuser01';
IdFTP1.Host := '192.168.27.102';
IdFTP1.Connect;
//IdFTP1.ChangeDir('/orasource/zbdoc');
end;
IdFTP1.TransferType := ftBinary;
BytesToTransfer := IdFTP1.Size(trim(edit1.Text));
try
IdFTP1.put(trim(edit1.Text),ExtractFileName(Edit1.text), true);
finally
IdFTP1.Disconnect;
end;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if not IdFTP1.Connected then
begin
IdFTP1.Username := 'ftpuser';
IdFTP1.Password := 'ftpuser01';
IdFTP1.Host := '192.168.27.102';
IdFTP1.Connect;
//IdFTP1.ChangeDir('/orasource/zbdoc');
end;
IdFTP1.TransferType := ftBinary;

BytesToTransfer := IdFTP1.Size('OA报销模块操作手册.doc');
try
IdFTP1.Get('OA报销模块操作手册.doc','c:\OA报销模块操作手册.doc', True);
finally
IdFTP1.Disconnect;
end;
end;

end.

bdmh 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 iqyely 的回复:]
恩?好像应该是
OnWorkBegin // ProgressBar1.Position:=0;
OnWork // ProgressBar1.Position:=AWorkCount;
OnWorkEnd // ProgressBar1.Max:=AWorkCountMax;
[/Quote]

就是这样
山水无言 2010-07-19
  • 打赏
  • 举报
回复
zxf_feng,很感谢你!!!
iqyely 2010-07-18
  • 打赏
  • 举报
回复
恩?好像应该是
OnWorkBegin // ProgressBar1.Position:=0;
OnWork // ProgressBar1.Position:=AWorkCount;
OnWorkEnd // ProgressBar1.Max:=AWorkCountMax;
SQLDebug_Fan 2010-07-18
  • 打赏
  • 举报
回复
没用过这个控件,帮顶。
山水无言 2010-07-18
  • 打赏
  • 举报
回复
使用idftp下载文件时,进度条ProgressBar1不会更新,谁能帮忙一下?
山水无言 2010-07-18
  • 打赏
  • 举报
回复
有人做过吗?
【风电功率预测】【多变量输入单步预测】基于BiTCN-LSTM的风电功率预测研究(Matlab代码实现)内容概要:本文研究了基于BiTCN-LSTM的风电功率预测模型,旨在通过多变量输入实现单步预测。该模型结合了双向时间卷积网络(BiTCN)和长短期记忆网络(LSTM),充分利用时间序列数据的前后依赖关系,提升了风电功率预测的精度与稳定性。文章详细介绍了模型的设计原理、结构组成及其实验验证过程,并在Matlab平台上实现了代码开发与仿真测试,展示了其相较于传统方法在处理非线性、波动性强的风电数据方面的优越性能。; 适合人群:具备一定机器学习基础和Matlab编程经验,从事新能源预测、电力系统分析或相关领域研究的研发人员及高校研究生。; 使用场景及目标:①应用于风电场日常运营中的功率预测,提高电网调度的可靠性和经济性;②为研究人员提供一种有效的深度学习融合模型设计思路,用于解决复杂时间序列预测问题;③通过Matlab代码实现,便于快速复现实验并进行算法优化。; 阅读建议:建议读者结合文中提供的Matlab代码,深入理解BiTCN与LSTM的网络架构及其协同工作机制,重点关注数据预处理、模型训练与评估流程,以便更好地掌握该方法在实际工程中的应用技巧。

2,508

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧