home *** CD-ROM | disk | FTP | other *** search
/ ftp.sberbank.sumy.ua / 2014.11.ftp.sberbank.sumy.ua.tar / ftp.sberbank.sumy.ua / incoming / 1 / ftpserver.txt < prev    next >
Text File  |  2014-02-08  |  9KB  |  306 lines

  1. unit Unit1; 
  2.  
  3. interface 
  4.  
  5. uses 
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  7.   Dialogs, IdBaseComponent, IdComponent, IdTCPServer, IdFTPServer,IdFTPList, 
  8.   StdCtrls, ExtCtrls, ComCtrls, ShellCtrls, Grids, Outline, DirOutln, 
  9.   IdUserAccounts; 
  10.  
  11. type 
  12.   TForm1 = class(TForm) 
  13.     IdFTPServer1: TIdFTPServer; 
  14.     Bevel1: TBevel; 
  15.     Image1: TImage; 
  16.     Image2: TImage; 
  17.     Label2: TLabel; 
  18.     WorkDirectory: TEdit; 
  19.     Memo1: TMemo; 
  20.     Label1: TLabel; 
  21.     IdUserManager1: TIdUserManager; 
  22.     procedure IdFTPServer1ListDirectory(ASender: TIdFTPServerThread; 
  23.       const APath: String; ADirectoryListing: TIdFTPListItems); 
  24.     procedure IdFTPServer1ChangeDirectory(ASender: TIdFTPServerThread; 
  25.       var VDirectory: String); 
  26.     procedure IdFTPServer1MakeDirectory(ASender: TIdFTPServerThread; 
  27.       var VDirectory: String); 
  28.     procedure ShellTreeView1Change(Sender: TObject; Node: TTreeNode); 
  29.     procedure IdFTPServer1StoreFile(ASender: TIdFTPServerThread; 
  30.       const AFileName: String; AAppend: Boolean; var VStream: TStream); 
  31.     procedure IdFTPServer1RetrieveFile(ASender: TIdFTPServerThread; 
  32.       const AFileName: String; var VStream: TStream); 
  33.     procedure IdFTPServer1DeleteFile(ASender: TIdFTPServerThread; 
  34.       const APathName: String); 
  35.     procedure IdFTPServer1GetFileSize(ASender: TIdFTPServerThread; 
  36.       const AFilename: String; var VFileSize: Int64); 
  37.     procedure IdFTPServer1RenameFile(ASender: TIdFTPServerThread; 
  38.       const ARenameFromFile, ARenameToFile: String); 
  39.     procedure FormCreate(Sender: TObject); 
  40.     procedure IdFTPServer1UserLogin(ASender: TIdFTPServerThread; 
  41.       const AUsername, APassword: String; var AAuthenticated: Boolean); 
  42.   private 
  43.     { Private declarations } 
  44.   public 
  45.     { Public declarations } 
  46.     HomeVDirectory:String; 
  47.   end; 
  48.  
  49. var 
  50.   Form1: TForm1; 
  51.  
  52. implementation 
  53.  
  54.  
  55. {$R *.dfm} 
  56.  
  57. function GetFileSize(const FileName: string): Longint; 
  58. var 
  59.   SearchRec: TSearchRec; 
  60. begin 
  61.   if FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec) = 0 then 
  62.     Result := SearchRec.Size 
  63.   else Result := -1; 
  64.   FindClose(SearchRec); 
  65. end; 
  66.  
  67. Function ReplaceChar(Source:String;SChar,RChar:Char):String; 
  68. var 
  69.   ReplacePointer,IsSp,i,j:Integer; 
  70.   Temp:String; 
  71. begin 
  72.   For ReplacePointer:=1 to length(Source) do 
  73.   begin 
  74.     if Source[ReplacePointer]=SChar then 
  75.       Source[ReplacePointer]:=RChar; 
  76.   end; 
  77.   { 
  78.   ReplacePointer:=1; 
  79.   j:=0; 
  80.   while ReplacePointer<=Length(Source)-1 do 
  81.   begin 
  82.     if (Source[ReplacePointer]=RChar) and (Source[ReplacePointer+1]=RChar) then 
  83.     begin 
  84.       For i:=ReplacePointer to Length(Source)-1 do 
  85.       begin 
  86.         Source[i]:=Source[i+1]; 
  87.         inc(j); 
  88.       end; 
  89.       inc(ReplacePointer); 
  90.     end; 
  91.     inc(ReplacePointer); 
  92.     inc(IsSp); 
  93.   end; 
  94.   Setlength(Source,length(Source)-j); 
  95.   } 
  96.   Result:=Source; 
  97. end; 
  98.  
  99. function SlashToBackSlash( const str: string ) : string; 
  100. var 
  101.   a: dword; 
  102. begin 
  103.   result := str; 
  104.   for a := 1 to length( result ) do 
  105.     if result[a] = '/' then 
  106.       result[a] := '\'; 
  107. end; 
  108.  
  109. function TransLatePath( const APathname, homeDir: string ) : string; 
  110. var 
  111.   tmppath: string; 
  112.   TempResult:String; 
  113. begin 
  114.   TempResult := SlashToBackSlash( homeDir ) ; 
  115.   tmppath := SlashToBackSlash( APathname ) ; 
  116.   if homedir = '/' then 
  117.   begin 
  118.     result := tmppath; 
  119.     exit; 
  120.   end; 
  121.  
  122.   if length( APathname ) = 0 then 
  123.     exit; 
  124.   Try 
  125.     if TempResult[length(TempResult)-1 ] = '\' then 
  126.       result := copy( TempResult, 1, length(TempResult) - 1 ) ; 
  127.   Except 
  128.     Exit; 
  129.   end; 
  130.   if tmppath[1] <> '\' then 
  131.     result := TempResult + '\'; 
  132.   result := TempResult + tmppath; 
  133. end; 
  134.  
  135. procedure TForm1.IdFTPServer1ListDirectory(ASender: TIdFTPServerThread; 
  136.   const APath: String; ADirectoryListing: TIdFTPListItems); 
  137.    
  138.   procedure AddlistItem( aDirectoryListing: TIdFTPListItems; Filename:string; ItemType: TIdDirItemType; size: int64; date: tdatetime ) ; 
  139.   var 
  140.     listitem: TIdFTPListItem; 
  141.   begin 
  142.     listitem := aDirectoryListing.Add; 
  143.     listitem.ItemType := ItemType; 
  144.     listitem.FileName := Filename; 
  145.     listitem.OwnerName := 'anonymous'; 
  146.     listitem.GroupName := 'all'; 
  147.     listitem.OwnerPermissions := '---'; 
  148.     listitem.GroupPermissions := '---'; 
  149.     listitem.UserPermissions := '---'; 
  150.     listitem.Size := size; 
  151.     listitem.ModifiedDate := date; 
  152.   end; 
  153.  
  154. var 
  155.   DirInfo: tsearchrec; 
  156.   FindResult,i: integer; 
  157.   Temp:PChar; 
  158. begin 
  159.   ADirectoryListing.DirectoryName := apath; 
  160.   //ShowMessage(Format('╜½╥¬╩╣╙├╡──┐┬╝╩╟: "%s"',[APath])); 
  161.     FindResult := FindFirst( WorkDirectory.Text+APath+'*.*',faAnyFile, DirInfo ) ; 
  162.     //╖ó╧╓╡┌╥╗╕÷╬─╝■╗≥─┐┬╝ 
  163.     while ( FindResult = 0 ) do 
  164.     begin 
  165.       if ( DirInfo.Attr and faDirectory > 0 ) then 
  166.         AddlistItem( ADirectoryListing, DirInfo.Name, ditDirectory, DirInfo.size,FileDateToDateTime( DirInfo.Time ) ) 
  167.         //╚τ╣√╜ß╣√╩╟─┐┬╝ 
  168.       else 
  169.         AddlistItem( ADirectoryListing, DirInfo.Name, ditFile, DirInfo.size,FileDateToDateTime( DirInfo.Time ) ) ; 
  170.         //╚τ╣√╜ß╣√╩╟╬─╝■ 
  171.       FindResult := FindNext( DirInfo ) ; 
  172.      //╝╠╨°▓Θ╒╥ 
  173.     end; 
  174.    FindClose( DirInfo ) ; 
  175.     //▓Θ┐┤╜ß╩°╣╪▒╒╧α╙ª╡─▓Θ╒╥╣²│╠ 
  176. end; 
  177.  
  178. procedure TForm1.IdFTPServer1ChangeDirectory(ASender: TIdFTPServerThread; 
  179.   var VDirectory: String); 
  180.  
  181.   {*╜½─┐┬╝╡≈╒√╬¬╔╧╥╗╝╢─┐┬╝*} 
  182.   Function EraseLastString(Source:String;EraseChar:Char):String; 
  183.   var 
  184.     BasePoint,DymaPoint:integer; 
  185.     StrLen:Integer; 
  186.   begin 
  187.     StrLen:=Length(Source); 
  188.     if StrLen<=0 then 
  189.       Result:=Source; 
  190.     //╥╤╛ 
  191.     DymaPoint:=-1; 
  192.     //│⌡╩╝╗»╓╕╒δ 
  193.     for BasePoint:=1 to StrLen do 
  194.     begin 
  195.       if Source[BasePoint]=EraseChar then 
  196.         DymaPoint:=BasePoint; 
  197.         //╢¿╬╗─┐┬╝╖╓╕⌠╫╓╖√ 
  198.     end; 
  199.     if DymaPoint=-1 then 
  200.     begin 
  201.       Result:=EraseChar 
  202.     end 
  203.     else 
  204.     begin 
  205.       SetLength(Source,DymaPoint-1); 
  206.       Result:=Source; 
  207.     end; 
  208.   end; 
  209.  
  210. var 
  211.   CurrentDir:String; 
  212. begin 
  213.   CurrentDir:=ASender.CurrentDir ; 
  214.   {┼╨╢╧╡▒╟░╡──┐┬╝╩╟╖±╬¬╕∙─┐┬╝} 
  215.   If VDirectory='..\' then 
  216.   begin 
  217.     VDirectory:=EraseLastString(CurrentDir,'\'); 
  218.   end; 
  219. end; 
  220.  
  221. procedure TForm1.IdFTPServer1MakeDirectory(ASender: TIdFTPServerThread; 
  222.   var VDirectory: String); 
  223. begin 
  224.   //MkDir(WorkDirectory.text+ASender.CurrentDir+VDirectory); 
  225.   MkDir(ReplaceChar(WorkDirectory.text+VDirectory,'/','\')); 
  226. end; 
  227.  
  228. procedure TForm1.ShellTreeView1Change(Sender: TObject; Node: TTreeNode); 
  229. begin 
  230.   WorkDirectory.Text:=Node.Item[Node.Index].Text 
  231. end; 
  232.  
  233. procedure TForm1.IdFTPServer1StoreFile(ASender: TIdFTPServerThread; 
  234.   const AFileName: String; AAppend: Boolean; var VStream: TStream); 
  235. var 
  236.   NewFile:String; 
  237. begin 
  238.   NewFile :=ReplaceChar(WorkDirectory.Text+AFileName,'/','\'); 
  239.   VStream:=TFileStream.Create(NewFile,fmCreate); 
  240. end; 
  241.  
  242. procedure TForm1.IdFTPServer1RetrieveFile(ASender: TIdFTPServerThread; 
  243.   const AFileName: String; var VStream: TStream); 
  244. var 
  245.   NewFile:String; 
  246. begin 
  247.   NewFile :=ReplaceChar(WorkDirectory.Text+AFileName,'/','\'); 
  248.   VStream:=TFileStream.Create(NewFile,fmOpenRead or fmShareDenyWrite)  
  249. end; 
  250.  
  251. procedure TForm1.IdFTPServer1DeleteFile(ASender: TIdFTPServerThread; 
  252.   const APathName: String); 
  253. var 
  254.   NewFile:String; 
  255. begin 
  256.   NewFile:=WorkDirectory.Text+ASender.CurrentDir+'\'+APathName; 
  257.   //╔·│╔╬─╝■╡─╛°╢╘┬╖╛╢ 
  258.   NewFile :=ReplaceChar(NewFile,'/','\'); 
  259.   DeleteFile(newFile); 
  260.   //╔╛│²╧α╙ª╡─╬─╝■ 
  261. end; 
  262.  
  263. procedure TForm1.IdFTPServer1GetFileSize(ASender: TIdFTPServerThread; 
  264.   const AFilename: String; var VFileSize: Int64); 
  265. var 
  266.   NewFile:String; 
  267. begin 
  268.   NewFile :=ReplaceChar(WorkDirectory.Text+AFileName,'/','\'); 
  269.   VFileSize:=GetFileSize(newFile); 
  270. end; 
  271.  
  272. procedure TForm1.IdFTPServer1RenameFile(ASender: TIdFTPServerThread; 
  273.   const ARenameFromFile, ARenameToFile: String); 
  274. var 
  275.   RenameFromFile,RenameToFile:String; 
  276.   //▒╗╨▐╕─╡─║══Ω│╔╡─╬─╝■╡─╛°╢╘┬╖╛╢├√│╞ 
  277. begin 
  278.   RenameFromFile:=WorkDirectory.Text+ASender.CurrentDir+'\'+ARenameFromFile; 
  279.   RenameToFile:=WorkDirectory.Text+ASender.CurrentDir+'\'+ARenameToFile; 
  280.   //╔·│╔╛°╢╘╬─╝■├√│╞ 
  281.   if FileExists(RenameToFile) then 
  282.     ASender.Connection.WriteLn(format('%s╥╤╛,╟δ╓╪╨┬╕─▒Σ╬─╝■├√│╞.',[ARenameToFile])) 
  283.     //╚τ╣√═Ω│╔╡─╬─╝■├√│╞╥╤╛,╘≥▓╗┤ª└φ▒╗╖ó╦═╧α╙ª╡─╨┼╧ó 
  284.   else 
  285.     RenameFile(RenameFromFile,RenameToFile) 
  286.     //╓╪├ⁿ├√╬─╝■╣ª─▄╩╡╧╓ 
  287.  
  288. end; 
  289.  
  290. procedure TForm1.FormCreate(Sender: TObject); 
  291. begin 
  292. IdFTPServer1.MaxConnectionReply.Text.AddStrings(Memo1.lines); 
  293. end; 
  294.  
  295. procedure TForm1.IdFTPServer1UserLogin(ASender: TIdFTPServerThread; 
  296.   const AUsername, APassword: String; var AAuthenticated: Boolean); 
  297. begin 
  298.   if (AUsername='lzmsoft') and (APassword='123') then 
  299.     AAuthenticated:=True 
  300.     //═¿╣²╚╧╓ñ 
  301.   else 
  302.     AAuthenticated:=False; 
  303.     //├╗╙╨═¿╣²╚╧╓ñ 
  304. end; 
  305.  
  306. end.