我使用nmftp控件下载unix平台上的FTP文件,都打不开,而且查看二进制码也不一样,郁闷
解决方案 »
- application问题
- 数据从DBGrid里导入到Excel的问题!
- 这段时间DELPHI方面出了好几本书,诸如:Inside VCL(深入核心——VCL架构剖析),DELPHI源码分析等,有的人说是DELPHI回光返照,delphi似乎快
- 想请教一个问题,谢谢
- 紧急救援,要多少分给多少分?晚上9:00结贴
- 在IF语句里怎么画图形呢?
- 关于图片的问题。回答有分!
- SQL SERVER 高手请进,进者有分只限前10名
- 如何减小delphi编译的exe更小?希望资深的delphi讨教,需要精辟的方法(高分相送!!!)
- 导数据到Excel的问题?
- 是一行行的字符串组成的字符串,如何按照行分离开?
- 如果在20秒以内你不能看懂笑话的意思,说明你还纯洁
NM不完善的,还是Indy吧,Indy10很强,可惜与Indy9不兼容,我以前N多Indy9的项目升级不到,郁闷呀
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IniFiles, StdCtrls, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdFTP, ComCtrls,md5;type
TForm1 = class(TForm)
IdFTP1: TIdFTP;
Button1: TButton;
Button2: TButton;
ProgressBar1: TProgressBar;
m_Log: TMemo;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
{===========================================================
FTP 文件下载程序 2002-07-03 Hanfi功能:下在指定目录下的所有文件(不包含子目录)
输入:Telecom.ini 文件的[FTP]段
输出:下载文件保存至当前目录下设置Telecom.ini文件的[FTP]段
[ftp]
system=UNIX //设置目标服务器类型 UNIX,DOS
IP=127.0.0.1 //设置目标服务器的IP地址
USER=guest //设置下载用户名
PASSWORD=guest //设置下载用户密码(应将此部分加密)
SERVERPATH=/app/download //设置下载目录===========================================================}
implementation
{$R *.dfm}
var
// 服务器信息变量
S_System,S_Host,S_Pass,S_User,S_Dir: String;
S_Files:TStrings;
procedure TForm1.FormCreate(Sender: TObject);
var
ServerIni: TIniFile;
begin
Top:=(Screen.Height-Height) div 2;
Left:=(screen.Width-width) div 2;
ServerIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'telecom.ini');
S_System:= ServerIni.ReadString('Ftp', 'SYSTEM', 'UNIX');
S_Host:= ServerIni.ReadString('Ftp', 'IP', 'IP');
S_User:=ServerIni.ReadString('Ftp', 'USER', 'USER');
S_Pass:=ServerIni.ReadString('Ftp', 'PASSWORD', 'Password');
S_Dir:=ServerIni.ReadString('Ftp', 'SERVERPATH', '/app/download');
ServerIni.Free;
with IdFTP1 do try
Button1.Enabled := False;
User := S_User;
Password := S_Pass;
Host := S_Host;
finally
Button1.Enabled := true;
end;
end;function GetNameFromDirLine(Line: String; Var IsDirectory: Boolean): String;
Var
//在字符串中取得文件名
i: Integer;
DosListing: Boolean;
begin
IsDirectory := Line[1] = 'd';
DosListing := false;
for i := 0 to 7 do begin
if (i = 2) and not IsDirectory then begin
IsDirectory := Copy(Line, 1, Pos(' ', Line) - 1) = '<DIR>';
if not IsDirectory then
DosListing := Line[1] in ['0'..'9']
else DosListing := true;
end;
Delete(Line, 1, Pos(' ', Line));
While Line[1] = ' ' do Delete(Line, 1, 1);
if DosListing and (i = 2) then break;
end;
Result := Line;
end;procedure TForm1.Button1Click(Sender: TObject);
var
name,Line: String;
i:integer;
IsDirectory: Boolean;
i_Start:integer;
begin
Button1.Enabled:=False;
Button2.Enabled:=False;
m_Log.Lines.Clear;
if not IdFTP1.Connected then
begin
m_Log.Lines.Add('## 开始下载任务');
m_Log.Lines.Add('=========================================');
try
IdFTP1.Connect;
IdFTP1.ChangeDir(S_Dir);
IdFTP1.TransferType := ftASCII;
S_Files:=TStringList.Create;
IdFTP1.List(S_Files);
m_Log.Lines.Add('');
m_Log.Lines.Add('## '+datetimetostr(Now)+' 连接服务器'+S_Host+'成功!');
m_Log.Lines.Add('');
except
Button1.Enabled:=True;
Button2.Enabled:=True;
Button2.SetFocus;
m_Log.Lines.Add('');
m_Log.Lines.Add('## '+datetimetostr(Now)+' 连接服务器失败!');
m_Log.Lines.Add('');
m_Log.Lines.Add('=========================================');
m_Log.Lines.Add('## 数据下载失败');
m_Log.Lines.SaveToFile('log_'+datetimetostr(Date())+'.log');
m_Log.Lines.Add('## 数据下载完毕,生成日志文件:log_'+datetimetostr(Date())+'.log');
exit;
end;
end; ProgressBar1.Position:=0;
ProgressBar1.Max:=S_Files.Count;
ProgressBar1.Min:=0;
ProgressBar1.Step:=1;
if S_System='UNIX' then
i_Start:=1
else
i_Start:=0;
for i:=i_Start to S_Files.Count-1 do
begin
Line := S_Files[i];
Name:=GetNameFromDirLine(Line, IsDirectory);
if not IsDirectory then
begin
try
IdFTP1.TransferType := ftBinary;
IdFTP1.Get(Name, Name, true);
ProgressBar1.StepIt;
m_Log.Lines.Add('文件:'+Name+' 下载完成;');
except
m_Log.Lines.Add('下载:'+Name+' 失败,无法覆盖本地 '+Name+' 文件;');
end;
end; end;
try
ProgressBar1.Position:=ProgressBar1.Max;
Button1.Enabled:=True;
Button2.Enabled:=True;
Button2.SetFocus;
m_Log.Lines.Add('=========================================');
IdFTP1.Disconnect ;
m_Log.Lines.Add('## '+datetimetostr(Now)+' 断开服务器连接!');
m_Log.Lines.SaveToFile('log_'+datetimetostr(Date())+'.log');
m_Log.Lines.Add('## 数据下载完毕,生成日志文件:log_'+datetimetostr(Date())+'.log');
except
m_Log.Lines.SaveToFile('Err.log');
end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
S_Files.Free;
end;
end.[/code]附录: telecom.ini
[ftp]
SYSTEM=UNIX
IP=127.0.0.1
USER=guest
PASSWORD=guest
SERVERPATH=/app/download使用 D6 中的 TIdFTP 控件,DEMO中有完整的例子