TenderBackupManager.pas 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. unit TenderBackupManager;
  2. interface
  3. uses
  4. Classes, SysUtils, ZhAPI, Windows;
  5. type
  6. TFileInfo = class
  7. private
  8. FFileName: string;
  9. FLastWriteDateTime: TDateTime;
  10. FSimpleName: string;
  11. function FileTimeToDateTime(AFileTime: TFileTime): TDateTime;
  12. procedure LoadFileDateTime;
  13. procedure SetFileName(const Value: string);
  14. public
  15. property FileName: string read FFileName write SetFileName;
  16. property SimpleName: string read FSimpleName;
  17. property LastWriteDateTime: TDateTime read FLastWriteDateTime;
  18. end;
  19. TBackupFileList = class
  20. private
  21. FFiles: TList;
  22. FFileRange: Integer;
  23. FPrefix: string;
  24. public
  25. constructor Create(AFileRange: Integer; APrefix: string);
  26. destructor Destroy; override;
  27. procedure LoadBackupFiles(APath: string);
  28. function OldestFile: TFileInfo;
  29. function LastestFile: TFileInfo;
  30. end;
  31. TBackupManager = class
  32. private
  33. FBackupPath: string;
  34. FOpenFiles: TBackupFileList;
  35. FSaveFiles: TBackupFileList;
  36. public
  37. constructor Create;
  38. destructor Destroy; override;
  39. procedure LoadBackupFile(ABackupPath: string);
  40. function LastestOpenBackupIsToday: Boolean;
  41. function OpenBackupFile: string;
  42. function SaveBackupFile: string;
  43. end;
  44. implementation
  45. { TBackupManager }
  46. constructor TBackupManager.Create;
  47. begin
  48. FOpenFiles := TBackupFileList.Create(5, 'o');
  49. FSaveFiles := TBackupFileList.Create(5, 's');
  50. end;
  51. destructor TBackupManager.Destroy;
  52. begin
  53. FOpenFiles.Free;
  54. FSaveFiles.Free;
  55. inherited;
  56. end;
  57. function TBackupManager.LastestOpenBackupIsToday: Boolean;
  58. var
  59. FileInfo: TFileInfo;
  60. begin
  61. FileInfo := FOpenFiles.LastestFile;
  62. Result := Trunc(FileInfo.LastWriteDateTime) = Date;
  63. end;
  64. procedure TBackupManager.LoadBackupFile(ABackupPath: string);
  65. begin
  66. if FBackupPath = ABackupPath then Exit;
  67. FBackupPath := ABackupPath;
  68. FOpenFiles.LoadBackupFiles(FBackupPath);
  69. FSaveFiles.LoadBackupFiles(ABackupPath);
  70. end;
  71. function TBackupManager.OpenBackupFile: string;
  72. var
  73. FileInfo: TFileInfo;
  74. begin
  75. FileInfo := FOpenFiles.OldestFile;
  76. Result := FileInfo.FileName;
  77. end;
  78. function TBackupManager.SaveBackupFile: string;
  79. var
  80. FileInfo: TFileInfo;
  81. begin
  82. FileInfo := FSaveFiles.OldestFile;
  83. Result := FileInfo.FileName;
  84. end;
  85. { TFileInfo }
  86. function TFileInfo.FileTimeToDateTime(AFileTime: TFileTime): TDateTime;
  87. var
  88. dft: DWord;
  89. lft: TFileTime;
  90. begin
  91. FileTimeToLocalFileTime(AFileTime, lft);
  92. FileTimeToDosDateTime(lft, LongRec(dft).Hi, LongRec(dft).Lo);
  93. Result := FileDateToDateTime(dft);
  94. end;
  95. procedure TFileInfo.LoadFileDateTime;
  96. var
  97. ffd: TWin32FindData;
  98. h: THandle;
  99. begin
  100. FLastWriteDateTime := 0;
  101. h := FindFirstFile(PChar(FFileName), ffd);
  102. if h <> INVALID_HANDLE_VALUE then
  103. FLastWriteDateTime := FileTimeToDateTime(ffd.ftLastWriteTime);
  104. windows.FindClose(h);
  105. end;
  106. procedure TFileInfo.SetFileName(const Value: string);
  107. begin
  108. FFileName := Value;
  109. FSimpleName := ExtractSimpleFileName(FFileName);
  110. LoadFileDateTime;
  111. end;
  112. { TBackupFileList }
  113. constructor TBackupFileList.Create(AFileRange: Integer; APrefix: string);
  114. var
  115. i: Integer;
  116. FileInfo: TFileInfo;
  117. begin
  118. FFileRange := AFileRange;
  119. FPrefix := APrefix;
  120. FFiles := TList.Create;
  121. for i := 1 to FFileRange do
  122. begin
  123. FileInfo := TFileInfo.Create;
  124. FFiles.Add(FileInfo);
  125. end;
  126. end;
  127. destructor TBackupFileList.Destroy;
  128. begin
  129. ClearObjects(FFiles);
  130. FFiles.Free;
  131. inherited;
  132. end;
  133. function TBackupFileList.LastestFile: TFileInfo;
  134. var
  135. i: Integer;
  136. FileInfo: TFileInfo;
  137. begin
  138. Result := TFileInfo(FFiles.First);
  139. for i := 1 to FFiles.Count - 1 do
  140. begin
  141. FileInfo := TFileInfo(FFiles.Items[i]);
  142. if FileInfo.LastWriteDateTime > Result.LastWriteDateTime then
  143. Result := FileInfo;
  144. end;
  145. end;
  146. procedure TBackupFileList.LoadBackupFiles(APath: string);
  147. var
  148. i: Integer;
  149. FileInfo: TFileInfo;
  150. begin
  151. for i := 1 to FFileRange do
  152. begin
  153. FileInfo := TFileInfo(FFiles.Items[i-1]);
  154. FileInfo.FileName := Format('%s%d.mtf', [APath + FPrefix, i]);
  155. end;
  156. end;
  157. function TBackupFileList.OldestFile: TFileInfo;
  158. var
  159. i: Integer;
  160. FileInfo: TFileInfo;
  161. begin
  162. Result := TFileInfo(FFiles.First);
  163. for i := 1 to FFiles.Count - 1 do
  164. begin
  165. FileInfo := TFileInfo(FFiles.Items[i]);
  166. if FileInfo.LastWriteDateTime < Result.LastWriteDateTime then
  167. Result := FileInfo;
  168. end;
  169. end;
  170. end.