zoukankan      html  css  js  c++  java
  • 封装Ftp API函数,实现上传,下载文件,创建目录

    //-------------------------------------------------------------------------  
    //  文件名:WLFtp.pas  
    //  描述:封装Ftp  API函数,实现上传,下载文件,创建目录  
    //  
    //  类名:TWLFtp  
    //  作者:Win  Lai  
    //  创建日期:2004-1-9  
    //  修改日期:2004-1-11  
    //-------------------------------------------------------------------------  
    unit  WLFtp;  
     
    interface  
     
    uses  
               Windows,  Messages,  Variants,SysUtils,  Classes,  Wininet,  Dialogs;  
     
    type  
               TWLFtp  =  class(TObject)  
     
               private  
                           FInetHandle:  HInternet;  //  句柄  
                           FFtpHandle:  HInternet;  //  句柄  
     
                           FHost:  string;  //  主机IP地址  
                           FUserName:  string;  //  用户名  
                           FPassword:  string;  //  密码  
                           FPort:  integer;  //  端口  
     
                           FCurrentDir:  string;  //  当前目录  
     
               public  
                           constructor  Create;virtual;  
                           destructor  Destroy;override;  
     
                           function  Connect:  boolean;  
                           function  Disconnect:  boolean;  
     
                           function  UploadFile(RemoteFile:  PChar;  NewFile:  PChar):  boolean;  
                           function  DownloadFile(RemoteFile:  PChar;  NewFile:  PChar):  boolean;  
     
                           function  CreateDirectory(Directory:  PChar):  boolean;  
     
                           function  LayerNumber(dir:  string):  integer;  
                           function  MakeDirectory(dir:  string):  boolean;  
                           function  FTPMakeDirectory(dir:  string):  boolean;  
                           function  IndexOfLayer(index:  integer;  dir:  string):  string;  
                           function  GetFileName(FileName:  string):  string;  
                           function  GetDirectory(dir:  string):  string;  
     
                           property  InetHandle:  HInternet  read  FInetHandle  write  FInetHandle;  
                           property  FtpHandle:  HInternet  read  FFtpHandle  write  FFtpHandle;  
                           property  Host:  string  read  FHost  write  FHost;  
                           property  UserName:  string  read  FUserName  write  FUserName;  
                           property  Password:  string  read  FPassword  write  FPassword;  
                           property  Port:  integer  read  FPort  write  FPort;  
     
                           property  CurrentDir:  string  read  FCurrentDir  write  FCurrentDir;  
     
    end;  
     
     
    implementation  
     
    //-------------------------------------------------------------------------  
    //  构造函数  
    constructor  TWLFtp.Create;  
    begin  
               inherited  Create;  
     
    end;  
     
    //-------------------------------------------------------------------------  
    //  析构函数  
    destructor  TWLFtp.Destroy;  
    begin  
     
               inherited  Destroy;  
    end;  
     
    //-------------------------------------------------------------------------  
    //  链接服务器  
    function  TWLFtp.Connect:  boolean;  
    begin  
               try  
                           Result  :=  false;  
                           //  创建句柄  
                           FInetHandle  :=  InternetOpen(PChar('KOLFTP'),  0,  nil,  nil,  0);  
                           FtpHandle  :=  InternetConnect(FInetHandle,  PChar(Host),  FPort,  PChar(FUserName),  
                                                                           PChar(FPassword),  INTERNET_SERVICE_FTP,  0,  255);  
                           if  Assigned(FtpHandle)  then  
                           begin  
                                       Result  :=  true;  
                           end;  
     
               except  
                           Result  :=  false;  
               end;  
    end;  
     
    //-------------------------------------------------------------------------  
    //  断开链接  
    function  TWLFtp.Disconnect:  boolean;  
    begin  
               try  
                           InternetCloseHandle(FFtpHandle);  
                           InternetCloseHandle(FInetHandle);  
                           FtpHandle:=nil;  
                           inetHandle:=nil;  
     
                           Result  :=  true;  
               except  
                           Result  :=  false;  
               end;  
    end;  
     
    //-------------------------------------------------------------------------  
    //  上传文件  
    function  TWLFtp.UploadFile(RemoteFile:  PChar;  NewFile:  PChar):  boolean;  
    begin  
               try  
                           Result  :=  true;  
                           FTPMakeDirectory(NewFile);  
                           if  not  FtpPutFile(FFtpHandle,  RemoteFile,  NewFile,  
                                                               FTP_TRANSFER_TYPE_BINARY,  255)  then  
                           begin  
                                       Result  :=  false;  
                           end;  
               except  
                           Result  :=  false;  
               end;  
    end;  
     
    //-------------------------------------------------------------------------  
    //  下载文件  
    function  TWLFtp.DownloadFile(RemoteFile:  PChar;  NewFile:  PChar):  boolean;  
    begin  
               try  
                           Result  :=  true;  
                           MakeDirectory(NewFile);  
                           if  not  FtpGetFile(FFtpHandle,  RemoteFile,  NewFile,  
                                                                                       True,  FILE_ATTRIBUTE_NORMAL,  FTP_TRANSFER_TYPE_BINARY  OR  INTERNET_FLAG_RELOAD,  255)  then  
                           begin  
                                       Result  :=  false;  
                           end;  
               except  
                           Result  :=  false;  
               end;  
    end;  
     
    //-------------------------------------------------------------------------  
    //  创建目录  
    function  TWLFtp.CreateDirectory(Directory:  PChar):  boolean;  
    begin  
               try  
                           Result  :=  true;  
                           if  FtpCreateDirectory(FFtpHandle,  Directory)=false  then  
                           begin  
                                       Result  :=  false;  
                           end;  
               except  
                           Result  :=  false;  
               end;  
    end;  
     
    //-------------------------------------------------------------------------  
    //  目录数  
    function  TWLFtp.LayerNumber(dir:  string):  integer;  
    var  
               i:  integer;  
               flag:  string;  
    begin  
               Result  :=  0;  
     
               for  i:=1  to  Length(dir)  do  
               begin  
                           flag  :=  Copy(dir,i,1);  
                           if  (flag='/')  or  (flag='/')  then  
                           begin  
                                       Result  :=  Result  +  1;  
                           end;  
               end;  
    end;  
     
    //-------------------------------------------------------------------------  
    //  创建目录  
    function  TWLFtp.FTPMakeDirectory(dir:  string):  boolean;  
    var  
               count,  i:  integer;  
               SubPath:  string;  
    begin  
               Result  :=  true;  
               count  :=  LayerNumber(dir);  
     
               for  i:=1  to  count  do  
               begin  
                           SubPath  :=  IndexOfLayer(i,  dir);  
                           if  CreateDirectory(PChar(CurrentDir+SubPath))=false  then  
                           begin  
                                       Result  :=  false;  
                           end;  
               end;  
    end;  
     
    //-------------------------------------------------------------------------  
    //  创建目录  
    function  TWLFtp.MakeDirectory(dir:  string):  boolean;  
    var  
               count,  i:  integer;  
               SubPath:  string;  
               str:  string;  
    begin  
               Result  :=  true;  
               count  :=  LayerNumber(dir);  
               str  :=  GetDirectory(dir);  
     
               for  i:=2  to  count  do  
               begin  
                           SubPath  :=  IndexOfLayer(i,  str);  
                           if  not  DirectoryExists(SubPath)  then  
                           begin  
                                       if  not  CreateDir(SubPath)  then  
                                       begin  
                                                   Result  :=  false;  
                                       end;  
                           end;  
               end;  
    end;  
     
    //-------------------------------------------------------------------------  
    //  获取index层的目录  
    function  TWLFtp.IndexOfLayer(index:  integer;  dir:  string):  string;  
    var  
               count,  i:  integer;  
               ch:  string;  
    begin  
               Result  :=  '';  
               count  :=  0;  
               for  i:=1  to  Length(dir)  do  
               begin  
                           ch  :=  Copy(dir,  i,  1);  
                           if  (ch='/')  or  (ch='/')  then  
                           begin  
                                       count  :=  count+1;  
                           end;  
                           if  count=index  then  
                           begin  
                                       break;  
                           end;  
                           Result  :=  Result  +  ch;  
               end;  
    end;  
     
    //-------------------------------------------------------------------------  
    //  获取文件名  
    function  TWLFtp.GetFileName(FileName:  string):  string;  
    begin  
               Result  :=  '';  
               while  (Copy(FileName,  Length(FileName),  1)<>'/')  and  (Length(FileName)>0)  do  
               begin  
                           Result  :=  Copy(FileName,  Length(FileName),  1)+Result;  
                           Delete(FileName,  Length(FileName),  1);  
               end;  
    end;  
     
    //-------------------------------------------------------------------------  
    //  获取目录  
    function  TWLFtp.GetDirectory(dir:  string):  string;  
    begin  
               Result  :=  dir;  
               while  (Copy(Result,  Length(Result),  1)<>'/')  and  (Length(Result)>0)  do  
               begin  
                           Delete(Result,  Length(Result),  1);  
               end;  
     
    {            if  Copy(Result,  Length),  1)='/'  then  
               begin  
                           Delete(Result,  1,  1);  
               end;}  
    end;  
     
    //-------------------------------------------------------------------------  
    end.  
  • 相关阅读:
    HBase 安装设置
    Python中通过函数对象创建全局变量
    Scala 中 构造函数,重载函数的执行顺序
    Hive 安装配置
    976. 三角形的最大周长
    922. 按奇偶排序数组 II
    350. 两个数组的交集 II
    349. 两个数组的交集
    242. 有效的字母异位词
    925. 长按键入
  • 原文地址:https://www.cnblogs.com/moonwind/p/4449402.html
Copyright © 2011-2022 走看看