⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uftp_louis_101.pas

📁 this application for FTP protocol File TYransfer Protocol to exchange an transfer file in a LAN delp
💻 PAS
字号:
unit UFtp_Louis_101;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdIntercept, IdLogBase, IdLogDebug, IdAntiFreezeBase, ShellApi,
  IdAntiFreeze, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdFTP, ComCtrls, ShellCtrls, FileCtrl, StdCtrls, Buttons, ExtCtrls, Menus,
  ImgList, ActnList, ActnMan, ToolWin, ActnCtrls, ActnMenus;

type
  TFFtp = class(TForm)
    GroupBox4: TGroupBox;
    ListeDistante: TListBox;
    DeconnectBtn: TBitBtn;
    ConnectBtn: TBitBtn;
    GroupBox1: TGroupBox;
    Edit4: TEdit;
    IdFTP1: TIdFTP;
    IdAntiFreeze1: TIdAntiFreeze;
    SaveDialog1: TSaveDialog;
    IdLogDebug1: TIdLogDebug;
    OpenDialog1: TOpenDialog;
    PopupMenu1: TPopupMenu;
    Edition1: TMenuItem;
    Coller1: TMenuItem;
    Copier1: TMenuItem;
    Couper1: TMenuItem;
    PopupMenu2: TPopupMenu;
    Fichier1: TMenuItem;
    Quitter1: TMenuItem;
    N1: TMenuItem;
    Telecharger: TMenuItem;
    GroupBox2: TGroupBox;
    Bevel4: TBevel;
    GroupBox3: TGroupBox;
    Fchier1: TMenuItem;
    Envoyer1: TMenuItem;
    Supprimer2: TMenuItem;
    ListeOrdi: TFileListBox;
    ActionManager1: TActionManager;
    EnvoyerAct: TAction;
    ImageList1: TImageList;
    TelechargerAct: TAction;
    QuitterAct: TAction;
    SupprimerOrdiAct: TAction;
    SupprimerSiteAct: TAction;
    Quitter3: TMenuItem;
    RepertoireParentAct: TAction;
    Image1: TImage;
    ActionMainMenuBar1: TActionMainMenuBar;
    BitBtn3: TBitBtn;
    BitBtn2: TBitBtn;
    OuvrirRepertoireSelectAct: TAction;
    Animate: TAnimate;
    InfoBtn: TBitBtn;
    StatusBar1: TStatusBar;
    DirectoryListBox1: TDirectoryListBox;
    procedure IdFTP1Status(axSender: TObject; const axStatus: TIdStatus;
      const asStatusText: String);
    procedure IdFTP1Disconnected(Sender: TObject);
    procedure DeconnectBtnClick(Sender: TObject);
    procedure IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
    procedure IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCountMax: Integer);
    procedure IdFTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
    procedure IdLogDebug1LogItem(ASender: TComponent; var AText: String);
    procedure ListeDistanteDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure ListeDistanteDragDrop(Sender, Source: TObject; X,
      Y: Integer);
    procedure ListeOrdi1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure ListeOrdi1DragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure EnvoyerActExecute(Sender: TObject);
    procedure QuitterActExecute(Sender: TObject);
    procedure TelechargerActExecute(Sender: TObject);
    procedure SupprimerSiteActExecute(Sender: TObject);
    procedure RepertoireParentActExecute(Sender: TObject);
    procedure ListeDistanteDblClick(Sender: TObject);
    procedure OuvrirRepertoireSelectActExecute(Sender: TObject);
    procedure InfoBtnClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ConnectBtnClick(Sender: TObject);
  private
    { D閏larations priv閑s }
    Procedure ChangeDir (Const Entry: String);
    Procedure Download(Const Entry: String);
    Procedure ResolveLink(Const Entry: String);
    Procedure Supprime(Const Entry: String);
    Procedure Telecharge(Const Entry: String);
  public
    { D閏larations publiques }
    AbortTransfer: Boolean;
    TransferringData: Boolean;
    procedure EnableControls(Enable: Boolean);
  end;

  TFTPServerType = (ftpUnix, ftpWindows);

var
  FFtp: TFFtp;
  FTPServerType: TFTPServerType;
  FileSize: Integer;
  FileName: String;
  STime: Extended;
  TransferringData: Boolean;

implementation

uses UConnex_101, UTelecharge_101, UEtatConnex_101;

{$R *.dfm}

procedure TFFTP.EnableControls(Enable: Boolean);
Begin
  ConnectBtn.Enabled := Enable;
  DeconnectBtn.Enabled := Enable and idftp1.Connected;
  ListeDistante.Enabled := Enable and IdFtp1.Connected;
End;

procedure TFFtp.IdFTP1Status(axSender: TObject; const axStatus: TIdStatus;
  const asStatusText: String);
begin
  FEtatConnex.ListeEtat.Items.Add(asStatusText);
end;

procedure TFFtp.IdFTP1Disconnected(Sender: TObject);
begin
  Edit4.Text := '';
  ListeDistante.Clear;
  EnableControls(True);
end;

procedure TFFtp.DeconnectBtnClick(Sender: TObject);
var
  S: String;
begin
  FFtp.PopupMenu2.AutoPopup := False;
  EnableControls(True);
  ConnectBtn.Enabled := True;
  FConnex.ConnexBtn.Enabled := True;
  If IdFtp1.Connected Then IdFtp1.Disconnect;
  S := FConnex.EditServeur.Text;
  FFtp.StatusBar1.Panels[0].Text :='D閏onnecter de : ' + S ;
end;

Function IsFatDir(const FatEntry: String): Boolean;
var
  S: String;
Begin
  S := Trim (FatEntry);
  S := Trim (Copy(S, Pos(' ', S) +1, Length(S)));
  S := Trim (Copy(S, Pos(' ', S) +1, Length(S)));
  S := Trim (Copy(S, 1, Pos(' ', S) - 1));
  Result := Uppercase(S) = '<DIR>';
End;

Function IsDir(Const Entry: String): Boolean;
Begin
  If FTPServerType = ftpWindows Then Result := IsFatDir(Entry)
  Else Result := (Length(Trim(Entry)) > 0) and (LowerCase(Trim(Entry))[1] = 'd');
end;

Function IsFile (Const Entry: String): Boolean;
Begin
  If FTPServerType = ftpWindows Then Result := Not IsFatDir(Entry)
  Else Result := (Length(Trim(Entry)) >0) And (Trim(Entry)[1] = '-');
End;

Function AccessAllowed(Const Entry: String): Boolean;
Begin
  If FTPServerType = ftpWindows then Result := True
  Else Result := (Length(Trim(Entry)) > 7) and (LowerCase(Trim(Entry))[8]='r');
End;

Function GetFatEntryName (Const FatEntry: String): String;
Begin
  Result := Trim(FatEntry);
  Result := Trim(Copy(Result, Pos(' ', Result) +1, Length(Result)));
  Result := Trim(Copy(Result, Pos(' ', Result) +1, Length(Result)));
  Result := Trim(Copy(Result, Pos(' ', Result) +1, Length(Result)));
End;

Function GetExt2EntryName (Const Ext2Entry: String): String;
Begin
  Result := Trim(Ext2Entry);
  Result := Trim(Copy(Result, Pos(' ', Result) +1, Length(Result)));
  Result := Trim(Copy(Result, Pos(' ', Result) +1, Length(Result)));
  Result := Trim(Copy(Result, Pos(' ', Result) +1, Length(Result)));
  Result := Trim(Copy(Result, Pos(' ', Result) +1, Length(Result)));
  Result := Trim(Copy(Result, Pos(' ', Result) +1, Length(Result)));
  Result := Trim(Copy(Result, Pos(' ', Result) +1, Length(Result)));
  Result := Trim(Copy(Result, Pos(' ', Result) +1, Length(Result)));
  Result := Trim(Copy(Result, Pos(' ', Result) +1, Length(Result)));
End;

Function GetEntryName( Const Entry: String): String;
Begin
  If FTPServerType = ftpWindows Then Result := GetFatEntryName (Entry)
  Else Result := GetExt2EntryName(Entry);
End;

Procedure TFFTP.ChangeDir(Const Entry: String);
Var
  Name: String;
Begin
  If IsDir(Entry) then
  Begin
    If AccessAllowed(Entry) then
    Begin
      Try
        EnableControls(False);
        Name := GetEntryName(Entry);
        Edit4.Text := Edit4.Text + Name + '/';
        IdFtp1.ChangeDir(Edit4.Text);
        Try
          IdFtp1.List(ListeDistante.Items);           
        Except;
      End;
        Finally
        EnableControls(True);
      End;
    End
  Else
    Begin
      FEtatConnex.ListeEtat.Items.Add('Acces NON Autoris

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -