IdFTPBaseFileSystem.pas 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. {
  2. $Project$
  3. $Workfile$
  4. $Revision$
  5. $DateUTC$
  6. $Id$
  7. This file is part of the Indy (Internet Direct) project, and is offered
  8. under the dual-licensing agreement described on the Indy website.
  9. (http://www.indyproject.org/)
  10. Copyright:
  11. (c) 1993-2005, Chad Z. Hower and the Indy Pit Crew. All rights reserved.
  12. }
  13. {
  14. $Log$
  15. }
  16. {
  17. Rev 1.8 8/24/2003 06:49:54 PM JPMugaas
  18. API Change in the FileSystem component so that a thread is passed instead of
  19. some data from the thread. This should also make the API's easier to manage
  20. than before and provide more flexibility for developers writing their own
  21. file system components.
  22. Rev 1.7 3/10/2003 05:09:10 PM JPMugaas
  23. MLST now works as expected with the file system. Note that the MLST means
  24. simply to give information about an item instead of its contents.
  25. GetRealFileName in IdFTPFileSystem now can accept the wildcard *.
  26. When doing dirs in EPLF, only information about a directory is retruned if it
  27. is specified.
  28. Rev 1.6 3/6/2003 10:59:58 AM JPMugaas
  29. Now handles the MFMT command and the MFCT (Modified Date fact) command.
  30. Rev 1.5 3/6/2003 08:26:20 AM JPMugaas
  31. Bug fixes.
  32. FTP COMB command can now work in the FTPFileSystem component.
  33. Rev 1.4 3/5/2003 03:28:06 PM JPMugaas
  34. MD5, MMD5, and XCRC are now supported in the Virtual File System.
  35. Rev 1.3 3/2/2003 04:54:26 PM JPMugaas
  36. Now does recursive dir lists with the Virtual File System layer as well as
  37. honors other switches.
  38. Rev 1.2 3/2/2003 02:20:24 PM JPMugaas
  39. Updated FTP File system. It now raises exceptions for errors plus load and
  40. save have been implemented. I also implemented RMDIR.
  41. Rev 1.1 3/2/2003 02:20:12 AM JPMugaas
  42. Updated with some enw functionality.
  43. Rev 1.0 11/13/2002 08:28:28 AM JPMugaas
  44. Initial import from FTP VC.
  45. }
  46. {*===========================================================================*}
  47. {* DESCRIPTION *}
  48. {*****************************************************************************}
  49. {* PROJECT : Indy 10 *}
  50. {* AUTHOR : Bas Gooijen *}
  51. {* MAINTAINER : Bas Gooijen *}
  52. {*...........................................................................*}
  53. {* DESCRIPTION *}
  54. {* *}
  55. {* Abstract base class for TIdFTPFileSystem *}
  56. {* *}
  57. {*...........................................................................*}
  58. {* HISTORY *}
  59. {* DATE VERSION AUTHOR REASONS *}
  60. {* *}
  61. {* 01/10/2002 1.0 Bas Gooijen Initial start *}
  62. {*****************************************************************************}
  63. unit IdFTPBaseFileSystem;
  64. interface
  65. {$i IdCompilerDefines.inc}
  66. uses
  67. Classes,
  68. IdBaseComponent,
  69. IdException,
  70. IdFTPList,
  71. IdFTPListOutput,
  72. IdFTPServerContextBase;
  73. type
  74. TIdFTPBaseFileSystem = class(TIdBaseComponent)
  75. protected
  76. procedure ErrPermissionDenied;
  77. procedure ErrCantRemoveDir;
  78. procedure ErrFileNotFound;
  79. procedure ErrNotAFile;
  80. procedure ErrNotADir;
  81. public
  82. procedure ChangeDir(AContext : TIdFTPServerContextBase; var VDirectory: TIdFTPFileName); virtual; abstract;
  83. procedure GetFileSize(AContext : TIdFTPServerContextBase; const AFilename: TIdFTPFileName; var VFileSize: Int64); virtual; abstract;
  84. procedure GetFileDate(AContext : TIdFTPServerContextBase; const AFilename: TIdFTPFileName; var VFileDate: TDateTime); virtual; abstract;
  85. procedure ListDirectory(AContext : TIdFTPServerContextBase; const APath: TIdFTPFileName; ADirectoryListing: TIdFTPListOutput; const ACmd, ASwitches : String); virtual; abstract;
  86. procedure RenameFile(AContext : TIdFTPServerContextBase; const ARenameToFile: TIdFTPFileName); virtual; abstract;
  87. procedure DeleteFile(AContext : TIdFTPServerContextBase; const APathName: TIdFTPFileName); virtual; abstract;
  88. procedure RetrieveFile(AContext : TIdFTPServerContextBase; const AFileName: TIdFTPFileName; var VStream: TStream); virtual; abstract;
  89. procedure StoreFile(AContext : TIdFTPServerContextBase; const AFileName: TIdFTPFileName; AAppend: Boolean; var VStream: TStream); virtual; abstract;
  90. procedure MakeDirectory(AContext : TIdFTPServerContextBase; var VDirectory: TIdFTPFileName); virtual; abstract;
  91. procedure RemoveDirectory(AContext : TIdFTPServerContextBase; var VDirectory: TIdFTPFileName); virtual; abstract;
  92. procedure SetModifiedFileDate(AContext : TIdFTPServerContextBase; const AFileName: TIdFTPFileName; var VDateTime: TDateTime); virtual; abstract;
  93. procedure GetCRCCalcStream(AContext : TIdFTPServerContextBase; const AFileName: TIdFTPFileName; var VStream : TStream); virtual; abstract;
  94. procedure CombineFiles(AContext : TIdFTPServerContextBase;
  95. const ATargetFileName: TIdFTPFileName; AParts: TStrings); virtual; abstract;
  96. end;
  97. EIdFileSystemException = class(EIdException);
  98. EIdFileSystemPermissionDenied = class(EIdFileSystemException);
  99. EIdFileSystemFileNotFound = class(EIdFileSystemException);
  100. EIdFileSystemNotAFile = class(EIdFileSystemException);
  101. EIdFileSystemNotADir = class(EIdFileSystemException);
  102. EIdFileSystemCannotRemoveDir = class(EIdFileSystemException);
  103. implementation
  104. uses IdResourceStringsProtocols;
  105. { TIdFTPBaseFileSystem }
  106. procedure TIdFTPBaseFileSystem.ErrCantRemoveDir;
  107. begin
  108. raise EIdFileSystemCannotRemoveDir.Create(RSFTPFSysErrMsg);
  109. end;
  110. procedure TIdFTPBaseFileSystem.ErrFileNotFound;
  111. begin
  112. raise EIdFileSystemFileNotFound.Create(RSFTPFSysErrMsg);
  113. end;
  114. procedure TIdFTPBaseFileSystem.ErrNotADir;
  115. begin
  116. raise EIdFileSystemNotADir.Create(RSFTPFSysErrMsg);
  117. end;
  118. procedure TIdFTPBaseFileSystem.ErrNotAFile;
  119. begin
  120. raise EIdFileSystemNotAFile.Create(RSFTPFSysErrMsg);
  121. end;
  122. procedure TIdFTPBaseFileSystem.ErrPermissionDenied;
  123. begin
  124. raise EIdFileSystemPermissionDenied.Create(RSFTPFSysErrMsg);
  125. end;
  126. end.