delphi FTP源码
delphi上传本地目录到FTP服务器

//we only want to have directories in the list (without ’.’ and ’..’)
//nun filtern wir das nach den ordnern (ohne ’.’ und ’..’)
end;
end;
var
dir: string;
details, nodetails: TStringList;
k: Integer;
begin
//set some basic settings on your ftp client (TIdFTPClient)
//falls unser ordner auf dem server noch nicht existiert, legen wir ihn an
if nodetails.IndexOf() = -1 then
begin
(nodetails.Strings[k] = ’.’) or
(nodetails.Strings[k] = ’..’) then
begin
details.Delete(k);
//hier kommen die grundangaben für unseren ftp client hin (TIdFTPClient)
with FTPClient do
begin
Host := ’your_’; // Adjust your data here / Hier gwünschte Daten eintragen
if dir <> ’’ then
begin
if dir[1] = ’/’ then Delete(dir, 1, 1);
idftp用法 -回复

idftp用法-回复"IDFTP用法" - 一步一步回答IDFTP(Internet Direct FTP)是Delphi语言开发的一个功能强大的FTP 组件,用于在Delphi应用程序中进行FTP文件的传输和管理。
本文将一步一步介绍IDFTP的用法,帮助读者了解如何使用该组件来实现FTP功能。
第一步:安装和使用IDFTP组件在使用IDFTP之前,首先需要在Delphi开发环境中安装该组件。
通常可以从第三方网站下载安装文件,然后按照安装向导进行安装。
安装完成后,在Delphi的组件面板中会出现IDFTP组件,可以将其拖放到需要使用FTP 功能的窗体上。
第二步:建立FTP连接在使用IDFTP组件之前,需要先建立与FTP服务器的连接。
可以使用以下代码来建立连接:delphiIDFTP.Host := 'ftp.example'; FTP服务器地址ername := 'username'; FTP登录用户名IDFTP.Password := 'password'; FTP登录密码IDFTP.Connect;上述代码中,将`Host`、`Username`和`Password`属性设置为相应的FTP 服务器地址、登录用户名和密码,然后调用`Connect`方法建立连接。
第三步:上传文件连接成功后,可以使用IDFTP组件的`Put`方法将文件上传到FTP服务器。
可以使用以下代码实现上传功能:delphiIDFTP.Put('localfile.txt', '/remotefolder/remoteFile.txt');上述代码中,将要上传的本地文件路径作为`Put`方法的第一个参数,将要保存在服务器上的文件路径作为第二个参数。
第四步:下载文件与上传类似,可以使用`Get`方法从FTP服务器下载文件。
以下是一个示例代码:delphiIDFTP.Get('/remotefolder/remoteFile.txt', 'localfile.txt');上述代码中,将要下载的文件路径作为`Get`方法的第一个参数,将要保存在本地的文件路径作为第二个参数。
Delphi客户端通过FTP服务器上传或下载文件或图片方法

Delphi客户端通过FTP服务器上传或下载文件或图片方法Delphi客户端通过FTP服务器上传或下载文件或图片方法首先在服务器端建立FTP服务器,网上有这种类型的软件,安装好后,在客户端建立服务器连接,然后再上传或下载文件或图片。
一、服务器连接procedure TForm1.ConnectButtonClick(Sender: TObject);beginif not IdFTP1.Connected then //如果与服务器断开连接begintry/doc/c312652032.html,ername:=UserI DEdit.Text;IdFTP1.Password:=PasswordEdit.Text;IdFTP1.Host:=FtpServerEdit.Text;IdFTP1.Connect; //Connect;Except //异常处理Application.MessageBox('服务器连接失败!','智博软件');end;ConnectButton.Enabled:=true;if IdFTP1.Connected thenbeginConnectButton.Caption:='断开';DebugListBox.Items.Add('主机名为:'+IdFTP1.Host);DebugListBox.Items.Add('连接成功');ConnectButton.Default:=false;end;endelsetryIdFTP1.Quit; //关闭客户端与服务器端的连接finallyConnectButton.Caption:='连接';DebugListBox.Items.Add('连接失败'); ConnectButton.Enabled:=true;ConnectButton.Default:=true;end;end;二、文件或图片上传Procedure TFrmMain.UploadFileCleck(Sender:TObject); varFileName : string;Item : TListItem;SendFileItem : TListItem;beginif not FTPClient.Connected thenexit;if ListViewLocalFile.Selected =nil thenexit;Item :=ListViewLocalFile.Selected; ListViewSendFile.Clear;//处理所有选中文件while Item <>nil dobeginSendFileItem := ListViewSendFile.Items.Add; SendFileItem.Caption := Item.Caption; //文件名SendFileItem.SubItems.Add(Item.SubItems[1]); //文件大小SendFileItem.SubItems.Add(LocaLPath); //本地路径SendFileItem.SubItems.Add('==>'); //图示SendFileItem.SubItems.Add(RemotePath); //远程路径SendFileItem.SubItems.Add(''); //状态//下一个选中的项目Item:=ListViewLocalFile.GetNextItem(Item,sdAll,[isSelected]);end;ListViewSendFile.Refresh; //刷新传送文件列表//传送文件ListViewLocalFile.Enabled :=false;DriveComboBox1.Enabled:=false;ListViewRemoteFile.Enabled:=False;IsTransFerring:=True;try//处理所有要传送的文件while ListViewSendFile.Items.Count>0 dobeginFileName:=ListViewSendFile.Item[0].Caption; //文件名ListViewSendFile.Item[0].SubItems[4]:='正在上传...';FTPClient.Put(LocalPath+'\'+FileName); //上传DisplayRemoteFileList();ListViewSendFile.items[0].Delect; //传送完毕,删除待传送文件列表ListViewSendFile.Refresh;end;//设置相关控件是否可用ListViewLocalFile.Enabled:=True;DriveComboBox1.Enabled:=True;ListVieewRemoteFile.Enabled:=True;IsTransferring:=False;exceptListViewSendFile.Items[0].SubItems[4]:='上传错误!';MessageDlg('上传文件发生错误!',mtError,[mbyes],0);//设置相关控件是否可用ListViewLocalFile.Enabled:=True;DriveCombBox1.Enabled:=True;ListViewRemoteFile.Enabled:=True;IsTransferring:=False; //没有传送状态end;end;三、文件或图片下载procedure TFrmMain.DownloadFileClick(Sender:TObject);varFileName :String;Item ,SendFileItem : TListItem;beginif not FTPClient.Connected Then //没有连接到服务器,退出exit;if ListViewRemoteFile.Selected; //得到选中的文件ListViewSendFile.Clear; //清空要传送的文件列表//处理所有选中的文件While Item <> nil dobeginSendFileItem :=ListViewSendFile.Items.Add; //增加到列表//列表项赋值SendFileItem.Caption := Item.Caption; //文件名SendFileItem.SubItems.Add(Item.SubItems[1]); //文件大小SendFileItem.SubItems.Add(LocaLPath); //本地路径SendFileItem.SubItems.Add('<=='); //图示SendFileItem.SubItems.Add(RemotePath); //远程路径SendFileItem.SubItems.Add('');//下一个选中的项目Item:=ListViewRemoteFile.GetNextItem(Item,sdAll,[isSelected]);end;ListViewSendFile.Refresh; //刷新传送文件列表//传送文件ListViewRemoteFile.Enabled:=false; //禁止操作相关控件IsTransferring:=True; //设置正在传送try//处理所有要传送的文件while ListViewSendFile.Items.Count >0 dobeginFileName := ListViewSendFile.Items[0].Caption; //文件名ListViewSendFile.Items[0].SubItems[4]:='正在下载...';ListViewSendFile.Refresh; //刷新传送文件列表if FileExists(FileName) then //判断文件是否存在beginif MessageDlg('文件己存在,继续下载吗?',mtConfirmation,[mbYes,mbNo],0)=mrYes thenFTPClient.Get(FileName,LocalPath+'\'+FileName,false,true) //续传elseFTPClient.Get(FileName,LocalPath+'\'+FileName,true,False); //覆盖endelseFTPClient.Get(FileName,LocalPath+'\'+FileName,false); //下载ListViewSendFile.items[0].Delect; //传送完毕,删除待传送文件列表ListViewSendFile.Refresh; //刷新待传送列表DisplayLocalFileList(); //刷新本地文件列表end;ListViewRemoteFile.Enabled:=true; IsTransferring:=False; //没有传送状态exceptListViewSendFile.Items[0].SubItems[4]:='下载错误'; ListViewSendFile.Refresh; //刷新待传送文件列表MessageDlg('下载文件发生错误!',mtError,[nbYes],0); ListViewRemoteFile.Enabled:=True; IsTransferring:=False; //没有传送状态end;end;以上代码在Delphi7中调试通过。
DELPHI编程经典源码总结

个人收集资料系列Delphi精典技艺问:如何让del+CTRL+ALT看不见程序运行?答:为了让程序用ALT+DEL+CTRL看不见,在implementation后添加声明:function RegisterServiceProcess(dwProcessID,dwType:Integer):Integer;stdcall;external'KERNEL32.DLL';再在上面的窗口Create事件加上一句:RegisterServiceProcess(GetCurrentProcessID,1);//隐藏也可以使用下面的函数:function My_SelfHide:Boolean;typeTRegisterServiceProcess=function(dwProcessID,dwType:DWord):DWORD;stdcall;varhNdl:THandle;RegisterServiceProcess:TRegisterServiceProcess;beginResult:=False;if Win32Platform<>VER_PLATFORM_WIN32_NT then//不是NTbeginhNdl:=LoadLibrary('KERNEL32.DLL');RegisterServiceProcess:=GetProcAddress(hNdl,'RegisterServiceProcess');RegisterServiceProcess(GetCurrentProcessID,1);FreeLibrary(hNdl);Result:=True;endelseExit;end;问:自我拷贝法怎么样使用?答:这种方法的原理是程序运行时先查看自己是不是在特定目录下,如果是就继续运行,如果不是就把自己拷贝到特定目录下,然后运行新程序,再退出旧程序.打开Delphi,新建一个工程,在窗口的Create事件中写代码:procedure TForm1.FormCreate(Sender:TObject);var myname:string;beginmyname:=ExtractFilename(Application.Exename);//获得文件名if application.Exename<>GetWindir+myname then//如果文件不是在Windows\System\那么..begincopyfile(pchar(application.Exename),pchar(GetWindir+myname),False);{将自己拷贝到Windows\System\下}Winexec(pchar(GetWindir+myname),sw_hide);//运行Windows\System\下的新文件application.Terminate;//退出end;end;其中GetWinDir是自定义函数,起功能是找出Windows\System\的路径.function GetWinDir:String;varBuf:array[0..MAX_PATH]of char;beginGetSystemDirectory(Buf,MAX_PATH);Result:=Buf;if Result[Length(Result)]<>'\'then Result:=Result+'\';end;问:如何避免同时运行多个相同程序?答:为了避免同时运行多个程序的副本(节约系统资源也),程序一般会弄成每次只能运行一个.这又有几种方法.一种方法是程序运行时先查找有没有相同的运行了,如果有,就立刻退出程序.修改dpr项目文件,修改begin和end之间的代码如下:beginApplication.Initialize;if FindWindow('TForm1','Form1')=0then begin//当没有找到Form1时执行下面代码Application.ShowMainForm:=False;//不显示主窗口Application.CreateForm(TForm1,Form1);Application.Run;end;end.另一种方法是启动时会先通过窗口名来确定是否已经在运行,如果是则关闭原先的再启动。
FTP C语言源代码

memset( &fileinfo, 0x00, sizeof(fileinfo) ); nRet = recv( s , ( char *)&fileinfo, sizeof(fileinfo), 0 ); if( nRet == SOCKET_ERROR ) {
return SOCK_RECVE_ERR; }
case SOCK_LISTEN_ERR: cout<<"SOCK_LISTEN_ERR"<<endl; break; 失败
// 监 听
case SOCK_ACCEPT_ERR: cout<<"SOCK_ACCEPT_ERR"<<endl; break; 连接失败
// 等 待
case SOCK_SEND_ERR: 失败
SOCKET s = socket( AF_INET, SOCK_STREAM, 0 );//创建套接字
if( s == INVALID_SOCKET )
{ return SOCK_CRSOCK_ERR;
//错误处理
}
unsigned long uladdr; uladdr = inet_addr("127.0.0.1");
#define #define #define #define #define #define #define #define #define #define #define
TRAN_SUCCESS 1 //传输成功
SOCK_WSA_ERR (-1) //启动 winsock 失败
SOCK_CRSOCK_ERR (-2) //创建套接字失败
//保证字节顺序 //保证字节顺序
delphi11.3中linuxpaserver源代码 -回复

delphi11.3中linuxpaserver源代码-回复Delphi 11.3 LinuxPaserver源代码解析Delphi 11.3是一款非常流行的集成开发环境(IDE),主要用于在Windows操作系统上使用Object Pascal编程语言开发应用程序。
然而,对于那些希望将Delphi代码扩展到其他平台上的开发人员来说,这样的选择可能有限。
好在,Delphi 11.3引入了LinuxPaserver源代码,使开发人员能够在Linux操作系统上开发和调试代码。
LinuxPaserver作为一个独立的组件,它充当了Windows操作系统和Linux操作系统之间的桥梁,使得Delphi开发者能够使用Delphi IDE在Windows上构建应用程序,并在Linux上运行和调试。
这为Delphi开发者提供了在不同操作系统上的更多选择,使其能够将代码移植到多个平台。
现在,让我们一步一步地解析Delphi 11.3中LinuxPaserver的源代码。
第一步:了解PaserverPaserver是Delphi 11.3中运行在Linux操作系统上的后台服务。
它允许Delphi IDE与Linux主机之间进行通信,并且可以实时调试和追踪代码。
Paserver支持通过TCP/IP协议进行通信,并提供了一组命令来执行各种操作,如启动调试会话、加载和保存文件等。
第二步:建立连接在Delphi IDE中,要在Linux操作系统上进行开发,首先需要与Linux 主机建立连接。
这可以通过打开“Tools”菜单,选择“Deploy Linux Paserver”选项来实现。
在弹出的对话框中,输入Linux主机的IP地址和登录凭据,然后点击“Connect”按钮。
第三步:配置和部署应用程序连接成功后,Delphi IDE会将应用程序的文件和相关资源部署到Linux主机上。
在部署过程中,Delphi IDE将自动调用Paserver来执行相关操作,如创建目录、复制文件等。
delphi11.3中linuxpaserver源代码

delphi11.3中linuxpaserver源代码Delphi 11.3中LinuxPaserver源代码Delphi 11.3是一款被广泛使用的集成开发环境(IDE),专门用于开发跨平台应用程序。
其中的LinuxPaserver源代码是Delphi在Linux平台上实现的一项重要功能。
本文将介绍Delphi 11.3中LinuxPaserver源代码的相关内容。
一、LinuxPaserver简介LinuxPaserver是Delphi的一个组件,它允许在Linux平台上进行开发、调试、部署和测试Delphi应用程序。
通过LinuxPaserver,开发人员可以使用Delphi IDE来创建跨平台应用,并且在Linux环境中进行调试和运行。
LinuxPaserver提供了一种简单有效的方式,让开发人员能够在Delphi IDE中使用Linux环境下的调试和运行工具。
通过LinuxPaserver,开发人员可以实现将Delphi应用程序移植到Linux平台,扩大了应用程序的覆盖范围,提高了开发效率。
二、LinuxPaserver源代码结构LinuxPaserver源代码是开放的,允许开发人员自行修改和定制。
其主要包含以下几个部分:1. 通信模块:用于实现Delphi IDE与LinuxPaserver之间的通信,确保二者之间的实时数据交互。
通信模块采用Socket通信方式,使用TCP/IP协议进行数据传输。
2. 调试模块:用于在Linux环境下进行应用程序的调试。
调试模块提供了一系列的调试工具,如断点调试、调试输出、变量监视等,以帮助开发人员定位和修复程序中的错误。
3. 运行时环境:LinuxPaserver源代码中还包含了一个运行时环境,用于加载和执行Delphi应用程序。
运行时环境提供了一些必要的运行时库和类,使得应用程序能够在Linux环境中正确运行。
三、LinuxPaserver源代码的重要功能1. 跨平台开发:LinuxPaserver使得开发人员可以在Delphi IDE中进行跨平台开发。
求用Delphi实现的FTP服务器端程序

求用Delphi实现的FTP服务器端程序{ $HDR$}{************************************************************** ********}{ Unit archived using Team Coherence } { Team Coherence is Copyright 2002 by Quality Software Co mponents }{ }{ For further information / comments, visit our WEB site at }{ }{************************************************************** ********}{}{ $Log: 23310: FTPServer_console.dpr{{ Rev 1.1 25/10/2004 22:48:54 ANeillans Version: 9.0.1 7{ Verified}{{ Rev 1.0 12/09/2003 22:47:52 ANeillans{ Initial Checkin{ Verified against Indy 9 and D7}{Demo Name: FTP Server DemoCreated By: Bas GooijenOn: UnknownNotes:FTP Server DemoSample of the usage of the TIdFtpServer component. Also shows how to use Indy in console appsUsername: myuserPassword: mypassVersion History:NoneTested:Indy 9:D5: UntestedD6: UntestedD7: 25th Oct 2004 by Andy NeillansTested with Microsoft FTP Client}program FTPServer_console;{$APPTYPE console}usesClasses,windows,sysutils,IdFTPList,IdFTPServer,idtcpserver,IdSocketHandle,idglobal,IdHashCRC;typeTFTPServer = classprivate{ Private declarations }IdFTPServer: tIdFTPServer;procedure IdFTPServer1UserLogin( ASender: TIdFTPServerT hread; const AUsername, APassword: string; var AAuthenticated: Boolean ) ;procedure IdFTPServer1ListDirectory( ASender: TIdFTPServe rThread; const APath: string; ADirectoryListing: TIdFTPListItems ) ;procedure IdFTPServer1RenameFile( ASender: TIdFTPServer Thread; const ARenameFromFile, ARenameT oFile: string ) ;procedure IdFTPServer1RetrieveFile( ASender: TIdFTPServer Thread; const AFilename: string; var VStream: TStream ) ;procedure IdFTPServer1StoreFile( ASender: TIdFTPServerThr ead; const AFilename: string; AAppend: Boolean; var VStream: T Stream ) ;procedure IdFTPServer1RemoveDirectory( ASender: TIdFTP ServerThread; var VDirectory: string ) ;procedure IdFTPServer1MakeDirectory( ASender: TIdFTPSer verThread; var VDirectory: string ) ;procedure IdFTPServer1GetFileSize( ASender: TIdFTPServer Thread; const AFilename: string; var VFileSize: Int64 ) ;procedure IdFTPServer1DeleteFile( ASender: TIdFTPServerThread; const APathname: string ) ;procedure IdFTPServer1ChangeDirectory( ASender: TIdFTPS erverThread; var VDirectory: string ) ;procedure IdFTPServer1CommandXCRC( ASender: TIdCom mand ) ;procedure IdFTPServer1DisConnect( AThread: TIdPeerThrea d ) ;protectedfunction TransLatePath( const APathname, homeDir: string ) : string;publicconstructor Create; reintroduce;destructor Destroy; override;end;constructor TFTPServer.Create;beginIdFTPServer := tIdFTPServer.create( nil ) ;IdFTPServer.DefaultPort := 21;IdFTPServer.AllowAnonymousLogin := False;IdFTPServer.EmulateSystem := ftpsUNIX;IdFTPServer.HelpReply.text := 'Help is not implemented';IdFTPServer.OnChangeDirectory := IdFTPServer1ChangeDir ectory;IdFTPServer.OnChangeDirectory := IdFTPServer1ChangeDir ectory;IdFTPServer.OnGetFileSize := IdFTPServer1GetFileSize;IdFTPServer.OnListDirectory := IdFTPServer1ListDirectory;IdFTPServer.OnUserLogin := IdFTPServer1UserLogin;IdFTPServer.OnRenameFile := IdFTPServer1RenameFile;IdFTPServer.OnDeleteFile := IdFTPServer1DeleteFile;IdFTPServer.OnRetrieveFile := IdFTPServer1RetrieveFile;IdFTPServer.OnStoreFile := IdFTPServer1StoreFile;IdFTPServer.OnMakeDirectory := IdFTPServer1MakeDirector y;IdFTPServer.OnRemoveDirectory := IdFTPServer1RemoveDir ectory;IdFTPServer.Greeting.NumericCode := 220;IdFTPServer.OnDisconnect := IdFTPServer1DisConnect;with mandHandlers.add dobeginCommand := 'XCRC';OnCommand := IdFTPServer1CommandXCRC;end;IdFTPServer.Active := true;end;function CalculateCRC( const path: string ) : string;varf: tfilestream;value: dword;IdHashCRC32: TIdHashCRC32;beginIdHashCRC32 := nil;f := nil;tryIdHashCRC32 := TIdHashCRC32.create;f := TFileStream.create( path, fmOpenRead or fmShareDeny Write ) ;value := IdHashCRC32.HashValue( f ) ;result := inttohex( value, 8 ) ;finallyf.free;IdHashCRC32.free;end;end;procedure TFTPServer.IdFTPServer1CommandXCRC( ASend er: TIdCommand ) ;// note, this is made up, and not defined in any rfc.vars: string;beginwith TIdFTPServerThread( ASender.Thread ) dobeginif Authenticated thenbegintrys := ProcessPath( CurrentDir, ASender.UnparsedParams ) ;s := TransLatePath( s, TIdFTPServerThread( ASender.Thread ) .HomeDir ) ;ASender.Reply.SetReply( 213, CalculateCRC( s ) ) ;exceptASender.Reply.SetReply( 500, 'file error' ) ;end;end;end;end;destructor TFTPServer.Destroy;beginIdFTPServer.free;inherited destroy;end;function StartsWith( const str, substr: string ) : boolean; beginresult := copy( str, 1, length( substr ) ) = substr;end;function BackSlashToSlash( const str: string ) : string; vara: dword;beginresult := str;for a := 1 to length( result ) doif result[a] = '\' thenresult[a] := '/';end;function SlashToBackSlash( const str: string ) : string; vara: dword;beginresult := str;for a := 1 to length( result ) doif result[a] = '/' thenresult[a] := '\';end;function TFTPServer.TransLatePath( const APathname, home Dir: string ) : string;vartmppath: string;beginresult := SlashT oBackSlash( homeDir ) ;tmppath := SlashT oBackSlash( APathname ) ;if homedir = '/' thenbeginresult := tmppath;exit;end;if length( APathname ) = 0 thenexit;if result[length( result ) ] = '\' thenresult := copy( result, 1, length( result ) - 1 ) ;if tmppath[1] <> '\' thenresult := result + '\';result := result + tmppath;end;function GetSizeOfFile( const APathname: string ) : int64;beginresult := FileSizeByName( APathname ) ;end;function GetNewDirectory( old, action: string ) : string;vara: integer;beginif action = '../' thenbeginif old = '/' thenbeginresult := old;exit;end;a := length( old ) - 1;while ( old[a] <> '\' ) and ( old[a] <> '/' ) dodec( a ) ;result := copy( old, 1, a ) ;exit;end;if ( action[1] = '/' ) or ( action[1] = '\' ) thenresult := actionelseresult := old + action;end;procedure TFTPServer.IdFTPServer1UserLogin( ASender: TId FTPServerThread;const AUsername, APassword: string; var AAuthenticated: B oolean ) ;beginAAuthenticated := ( AUsername = 'myuser' ) and ( APasswor d = 'mypass' ) ;if not AAuthenticated thenexit;ASender.HomeDir := '/';asender.currentdir := '/';end;procedure TFTPServer.IdFTPServer1ListDirectory( ASender: TIdFTPServerThread; const APath: string; ADirectoryListing: TIdF TPListItems ) ;procedure AddlistItem( aDirectoryListing: TIdFTPListItems; F ilename: string; ItemType: TIdDirItemType; size: int64; date: tdat etime ) ;varlistitem: TIdFTPListItem;beginlistitem := aDirectoryListing.Add;listitem.ItemType := ItemType;listitem.FileName := Filename;listitem.OwnerName := 'anonymous';listitem.GroupName := 'all';listitem.OwnerPermissions := '---';listitem.GroupPermissions := '---';erPermissions := '---';listitem.Size := size;listitem.ModifiedDate := date;end;varf: tsearchrec;a: integer;beginADirectoryListing.DirectoryName := apath;a := FindFirst( TransLatePath( apath, ASender.HomeDir ) + '* .*', faAnyFile, f ) ;while ( a = 0 ) dobeginif ( f.Attr and faDirectory > 0 ) thenAddlistItem( ADirectoryListing, , ditDirectory, f.size, Fi leDateToDateTime( f.Time ) )elseAddlistItem( ADirectoryListing, , ditFile, f.size, FileDat eToDateTime( f.Time ) ) ;a := FindNext( f ) ;end;FindClose( f ) ;end;procedure TFTPServer.IdFTPServer1RenameFile( ASender: TI dFTPServerThread;const ARenameFromFile, ARenameToFile: string ) ;beginif not MoveFile( pchar( TransLatePath( ARenameFromFile, A Sender.HomeDir ) ) , pchar( TransLatePath( ARenameT oFile, ASe nder.HomeDir ) ) ) thenRaiseLastWin32Error;end;procedure TFTPServer.IdFTPServer1RetrieveFile( ASender: TI dFTPServerThread;const AFilename: string; var VStream: TStream ) ;beginVStream := TFileStream.create( translatepath( AFilename, AS ender.HomeDir ) , fmopenread or fmShareDenyWrite ) ;end;procedure TFTPServer.IdFTPServer1StoreFile( ASender: TIdF TPServerThread;const AFilename: string; AAppend: Boolean; var VStream: TS tream ) ;beginif FileExists( translatepath( AFilename, ASender.HomeDir ) ) and AAppend thenbeginVStream := TFileStream.create( translatepath( AFilename, AS ender.HomeDir ) , fmOpenWrite or fmShareExclusive ) ;VStream.Seek( 0, soFromEnd ) ;endelseVStream := TFileStream.create( translatepath( AFilename, AS ender.HomeDir ) , fmCreate or fmShareExclusive ) ;end;procedure TFTPServer.IdFTPServer1RemoveDirectory( ASen der: TIdFTPServerThread;var VDirectory: string ) ;beginRmDir( TransLatePath( VDirectory, ASender.HomeDir ) ) ;end;procedure TFTPServer.IdFTPServer1MakeDirectory( ASender: TIdFTPServerThread;var VDirectory: string ) ;beginMkDir( TransLatePath( VDirectory, ASender.HomeDir ) ) ;end;procedure TFTPServer.IdFTPServer1GetFileSize( ASender: TI dFTPServerThread;const AFilename: string; var VFileSize: Int64 ) ;beginVFileSize := GetSizeOfFile( TransLatePath( AFilename, ASend er.HomeDir ) ) ;end;procedure TFTPServer.IdFTPServer1DeleteFile( ASender: TId FTPServerThread;const APathname: string ) ;beginDeleteFile( pchar( TransLatePath( ASender.CurrentDir + '/' + APathname, ASender.HomeDir ) ) ) ;end;procedure TFTPServer.IdFTPServer1ChangeDirectory( ASen der: TIdFTPServerThread;var VDirectory: string ) ;beginVDirectory := GetNewDirectory( ASender.CurrentDir, VDirect ory ) ;end;procedure TFTPServer.IdFTPServer1DisConnect( AThread: TI dPeerThread ) ;begin// nothing much hereend;beginwith TFTPServer.Create dotrywriteln( 'Running, press [enter] to terminate' ) ;readlnfinallyfree;end;end.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//连接FTP
var
i:integer;
tr : Tstrings;
IdFTP1.Quit;
tr := TStringlist.Create;
IdFTP1.Host := hostTxt.Text; //FTP服务器地址 172.20.16.76
IdFTP1.Port := StrToInt(PortTxt.Text); //FTP服务器端口号9500
ername := UserTxt.Text; //FTP服务器用户名
IdFTP1.Password := pwdTxt.Text; //FTP服务器密码
IdFTP1.Connect(); //连接到ftp
IdFTP1.ChangeDir('JMPZ');
IdFTP1.List(tr); //得到目录下所有文件列表
FFTxt.Items.Assign(tr);
tr.Free;
//ftp当前路径,从登陆用户的起始目录起始
IdFTP1.RetrieveCurrentDir
//ftp目录变换,DirName只能是上一目录,或者下一目录,无需加"/"
IdFTP1.ChangeDir(DirName);
idftp_Client.Connected// 判断是否连接
//要使用IdFTP1.DirectoryListing属性,必须uses IdAllFTPListParsers;否则会有no idftplistparse classes have been registered的错误
//===========================================================
UseMLIS为目录解析器相关的参数,不同的Ftp服务器,会有不同的格式
//使用idftp1.list命令获取的目录列表时,显示列表为
drw-rw-rw- 1 user group0 Jun 2619:30 JMPZ
drw-rw-rw- 1 user group0 Jun 2619:31加密配置
若进入二级目录,则多显示两行
drw-rw-rw- 1 user group0 Jun 2619:30 .
drw-rw-rw- 1 user group0 Jun 2619:30 ..
drw-rw-rw- 1 user group0 Apr 509:420旧订单
drw-rw-rw- 1 user group0 Apr 509:2911rrrrrrrr
但是当参数eMLIS:= true;时,显示列表为
Type=dir;Modify=20170626113034;Win32.ea=0x00000010; JMPZ
Type=dir;Modify=20170626113101;Win32.ea=0x00000010; 加密配置
若进入二级目录,则多显示行
Type=cdir;Modify=20170626113034;Win32.ea=0x00000010; /JMPZ
Type=dir;Modify=20170405014212;Win32.ea=0x00000010; 0旧订单
Type=dir;Modify=20170405012904;Win32.ea=0x00000010; 11rrrrrrrr
Type=dir;Modify=20170608010420;Win32.ea=0x00000010; 4501036094
或者(不同的Ftp服务器,会有不同的格式)
11-16-1604:59PM <DIR> aspnet_client
06-28-1709:06AM <DIR> H_I
11-15-1608:43AM <DIR> H_P
09-30-1508:43AM <DIR> JMPZ
09-22-1503:52PM <DIR> USB_Driver_Windows
//=================================================================
//上传文件,要保证FTP路径正确,文件夹存在,默认会覆盖
uses IdFTPCommon;//ftBinary
IdFTP1.Put('本地文件及路径', AnsiToUtf8('FTP文件夹相对路径'));
IdFTP1.TransferType := ftBinary;
IdFTP1.Put('1.txt', AnsiToUtf8('4501036094\Main.txt'));
//================================================================
//创建文件夹,调试模式下,会报错
try
IdFTP1.ChangeDir('000');
except
IdFTP1.MakeDir('000');
IdFTP1.ChangeDir('000');
end;
//===================================================================== =
//判断文件是否存在
if idftp1.Size('ip.bin')=-1then
begin
NoteFlag('下载失败',clred);Exit;
end;
//==================================================================== //下载文件夹内的所有文件及文件夹
procedure TForm1.DownloadDirectory(var idFTP: TIdFtp;LocalDir, RemoteDir: string);
var
i,DirCount: Integer;
strName: string;
begin
if Copy(LocalDir,Length(LocalDir),1)<>'\'then
LocalDir:=LocalDir+'\';
if not DirectoryExists(LocalDir + RemoteDir) then
begin
CreateDirectory(PChar(LocalDir + RemoteDir),nil); //创建一个全路径的文件夹
LogTxt.Lines.Add('建立目录:' + LocalDir + RemoteDir);
end;
idFTP.ChangeDir(AnsiToUtf8(RemoteDir));
idFTP.TransferType := ftASCII;
idFTP.List(nil);
DirCount := idFTP.DirectoryListing.Count;
for i := 0to DirCount - 1do
begin
strName := Utf8ToAnsi(idFTP.DirectoryListing.Items[i].FileName);
LogTxt.Lines.Add('解析文件:' + strName);
if idFTP.DirectoryListing.Items[i].ItemType = ditDirectory then
if (strName = '.') or (strName = '..') then
Continue
else
begin
DownloadDirectory(idFTP,LocalDir + RemoteDir + '\', strName);
idFTP.ChangeDir('..');
idFTP.List(nil);
end
else
begin
if (ExtractFileExt(strName) = '.txt') or (ExtractFileExt(strName) = '.html') or (ExtractFileExt(strName) = '.htm') then
idFTP.TransferType := ftASCII //文本模式
else
idFTP.TransferType := ftBinary; //二进制模式
idFTP.Get(AnsiToUtf8(strName), LocalDir + RemoteDir + '\' + strName, True);
LogTxt.Lines.Add('下载文件:' + strName);
end;
Application.ProcessMessages;
end;
end;
//调用
DownloadDirectory(idftp1,ExtractFilePath(Application.ExeName),'H_C');
//ExtractFilePath(Application.ExeName):下载到本地文件夹
//H_C:FTP的文件夹。