2010年9月8日   
[首页] [业界新闻] [编程技巧] [控件仓库] [源码下载] [书籍下载] [系统设计] [会员中心] [请您留言] [自由论坛]
  本站新增划词翻译功能!!

上傳本地目錄到FTP服務器
日期:2007-12-17 类别:网络 作者: 推荐:本站 人气:3737


程序代碼


procedure UploadPerFTP;
procedure GetDir(dir: string);
var
SearchRec: TSearchRec;
details, nodetails: TStringList;
k: Integer;
begin
  //iterate through directory given
    //schleife über alle dateien im ordner
    if FindFirst(dir + ’*.*’, faAnyFile, SearchRec) = 0 then
  begin
    repeat
    
    //get rid of the both "dummy-directories" ’.’ and ’..’
        //die ordner ’.’ und ’..’ brauchen man nicht
        if (SearchRec.Name <> ’.’) and (SearchRec.Name <> ’..’) then
    begin
      //if we found a folder
          //falls wir einen ordner haben
          if (SearchRec.Attr and faDirectory) = faDirectory then
      begin
        //get folder contents from ftp. one with details, one without
            //holen wir uns den ordnerinhalt mit details und einmal ohne vom server
            details   := TStringList.Create;
        nodetails := TStringList.Create;
        FTPClient.List(details, ’’, True);
        FTPClient.List(nodetails, ’’, False);
        
        //we only want to have directories in the list (without ’.’ and ’..’)
            //nun filtern wir das nach den ordnern (ohne ’.’ und ’..’)
            for k := details.Count - 1 downto 0 do
        begin
          if details.Strings[k] <> ’’ then
          begin
            if (details.Strings[k][1] <> ’d’) or
            (nodetails.Strings[k] = ’.’) or
            (nodetails.Strings[k] = ’..’) then
            begin
              details.Delete(k);
              nodetails.Delete(k);
            end;
          end;
        end;
        
        //if our directory does not exists on the server, create it
            //falls unser ordner auf dem server noch nicht existiert, legen wir ihn an
            if nodetails.IndexOf(SearchRec.Name) = -1 then
        begin
          FTPClient.MakeDir(SearchRec.Name);
        end;
        
        //change into next directory on server
            //nun wechseln wir in den n?chsten ordner
            FTPClient.ChangeDir(SearchRec.Name);
        details.Free;
        nodetails.Free;
        
        //and also locally go into the next subfolder
            //und suchen lokal im n?chsten unterordner weiter
            GetDir(dir + SearchRec.Name + ’\’);
        
        //we have to go one directory up after leaving the recursion
            //wenn die rekursion zurück ist, müssen wir wieder eine ordnerstufe hochgehen
            FTPClient.ChangeDirUp;
      end  
      else  
      begin
        //if it’s only a file, upload it to the current directory
            //falls wir eine datei angetroffen haben, k?nnen wir diese uploaden
            FTPClient.Put(dir + SearchRec.Name, SearchRec.Name);
      end;
    end;
    until FindNext(SearchRec) <> 0;
    FindClose(SearchRec);
  end;
end;
var
dir: string;
details, nodetails: TStringList;
k: Integer;
begin
  //set some basic settings on your ftp client (TIdFTPClient)
  //hier kommen die grundangaben für unseren ftp client hin (TIdFTPClient)
  with FTPClient do
    begin
      Host     := ’your_server.com’;            // Adjust your data here / Hier gwünschte Daten eintragen
    Username := ’your_username’;
      // Adjust your data here / Hier gwünschte Daten eintragen
    Password := ’your_password’;
      // Adjust your data here / Hier gwünschte Daten eintragen
    Passive := True;                      // Adjust your data here / Hier gwünschte Daten eintragen
  end;
    FTPClient.Connect;
    
    //if you want to upload you data to an remote-directory, enter it below (does not matter if ’dir\dir’ or ’dir/dir’)
  //falls die daten in ein remote-directory heraufgeladen werden sollen, kann es hier angegeben werden (egal ob ’dir\dir’ oder ’dir/dir’)
  dir := StringReplace(’your/remote_directory’, ’\’, ’/’, [rfReplaceAll]);
  // Adjust your data here / Hier gwünschte Daten eintragen

    //remove first ’/’ if there’s one
  //wir l?schen das erste ’/’, falls eines existiert
  if dir <> ’’ then
    begin
      if dir[1] = ’/’ then Delete(dir, 1, 1);

      //but add a ’/’ at the end
    //aber am ende fügen wir ein ’/’ hinzu
    if dir[Length(dir)] <> ’/’ then dir := dir + ’/’;

      //loop through our remote-directories
    //schleife über alle remote-directories
    while Pos(’/’, dir) > 0 do
    begin
        //get folder contents from ftp. one with details, one without
      //runterladen der aktuellen ordnerinhalte vom server (mit und ohne details)
      details   := TStringList.Create;
        nodetails := TStringList.Create;
        FTPClient.List(details, ’’, True);
        FTPClient.List(nodetails, ’’, False);
        
        //we only want to have directories in the list (without ’.’ and ’..’)
      //wir wollen wieder nur ordner ohne ’.’ und ’..’
      for k := details.Count - 1 downto 0 do
        begin
          if details.Strings[k] <> ’’ then
          begin
            if (details.Strings[k][1] <> ’d’) or
            (nodetails.Strings[k] = ’.’) or
            (nodetails.Strings[k] = ’..’) then
            begin
              details.Delete(k);
              nodetails.Delete(k);
            end;
          end;
        end;
        
        //if our directory does not exists on the server, create it
      //falls der ordner nicht existiert, legen wir ihn an
      if nodetails.IndexOf(Copy(dir, 1, Pos(’/’, dir) - 1)) = -1 then
      begin
          FTPClient.MakeDir(Copy(dir, 1, Pos(’/’, dir) - 1));
      end;
        
        //change to our directory on server
      //nun wechseln wir in den n?chsten ordner auf dem server
      FTPClient.ChangeDir(Copy(dir, 1, Pos(’/’, dir) - 1));

        //remove first directory from path (’your/directory/subdir/’ --> ’directory/subdir/’)
      //wir schneiden den ersten ordner vom pfad ab (’dein/ordner/unterordner/’ --> ’ordner/unterordner/’)
      Delete(dir, 1, Pos(’/’, dir));
      details.Free;
        nodetails.Free;
      end;
    end;
    
    //ftp client is ready in your remote-directory
  //begin to upload our local directory
  //der ftp client ist nun im remote-directory bereit
  //wür k?nnen anfangen unseren lokalen ordner raufzuladen
  dir := ’C:\your\local\directory\’;
    // Adjust your data here / Hier gwünschte Daten eintragen
  if dir[Length(dir)] <> ’\’ then dir := dir + ’\’;
    GetDir(dir);
    FTPClient.Disconnect;
  end;

网友评论区



(C)Copyright Delphi俱乐部, 1999-2010。所有版权保留
京ICP备05013674号