我用ftp传文件到一个远程机器上的文件夹里,这个文件夹可能不存在,问一个,怎么样才能判断文件夹不存在呀

解决方案 »

  1.   

    //-------------------------------------------------------------------------
    // 文件名:WLFtp.pas
    // 描述:封装Ftp API函数,实现上传,下载文件,创建目录
    //
    // 类名:TWLFtp
    // 作者:Win Lai
    // 创建日期:2004-1-9
    // 修改日期:2004-1-11
    //-------------------------------------------------------------------------
    unit WLFtp;interfaceuses
    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.