123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- unit TenderBackupManager;
- interface
- uses
- Classes, SysUtils, ZhAPI, Windows;
- type
- TFileInfo = class
- private
- FFileName: string;
- FLastWriteDateTime: TDateTime;
- FSimpleName: string;
- function FileTimeToDateTime(AFileTime: TFileTime): TDateTime;
- procedure LoadFileDateTime;
- procedure SetFileName(const Value: string);
- public
- property FileName: string read FFileName write SetFileName;
- property SimpleName: string read FSimpleName;
- property LastWriteDateTime: TDateTime read FLastWriteDateTime;
- end;
- TBackupFileList = class
- private
- FFiles: TList;
- FFileRange: Integer;
- FPrefix: string;
- public
- constructor Create(AFileRange: Integer; APrefix: string);
- destructor Destroy; override;
- procedure LoadBackupFiles(APath: string);
- function OldestFile: TFileInfo;
- function LastestFile: TFileInfo;
- end;
- TBackupManager = class
- private
- FBackupPath: string;
- FOpenFiles: TBackupFileList;
- FSaveFiles: TBackupFileList;
- public
- constructor Create;
- destructor Destroy; override;
- procedure LoadBackupFile(ABackupPath: string);
- function LastestOpenBackupIsToday: Boolean;
- function OpenBackupFile: string;
- function SaveBackupFile: string;
- end;
- implementation
- { TBackupManager }
- constructor TBackupManager.Create;
- begin
- FOpenFiles := TBackupFileList.Create(5, 'o');
- FSaveFiles := TBackupFileList.Create(5, 's');
- end;
- destructor TBackupManager.Destroy;
- begin
- FOpenFiles.Free;
- FSaveFiles.Free;
- inherited;
- end;
- function TBackupManager.LastestOpenBackupIsToday: Boolean;
- var
- FileInfo: TFileInfo;
- begin
- FileInfo := FOpenFiles.LastestFile;
- Result := Trunc(FileInfo.LastWriteDateTime) = Date;
- end;
- procedure TBackupManager.LoadBackupFile(ABackupPath: string);
- begin
- if FBackupPath = ABackupPath then Exit;
- FBackupPath := ABackupPath;
- FOpenFiles.LoadBackupFiles(FBackupPath);
- FSaveFiles.LoadBackupFiles(ABackupPath);
- end;
- function TBackupManager.OpenBackupFile: string;
- var
- FileInfo: TFileInfo;
- begin
- FileInfo := FOpenFiles.OldestFile;
- Result := FileInfo.FileName;
- end;
- function TBackupManager.SaveBackupFile: string;
- var
- FileInfo: TFileInfo;
- begin
- FileInfo := FSaveFiles.OldestFile;
- Result := FileInfo.FileName;
- end;
- { TFileInfo }
- function TFileInfo.FileTimeToDateTime(AFileTime: TFileTime): TDateTime;
- var
- dft: DWord;
- lft: TFileTime;
- begin
- FileTimeToLocalFileTime(AFileTime, lft);
- FileTimeToDosDateTime(lft, LongRec(dft).Hi, LongRec(dft).Lo);
- Result := FileDateToDateTime(dft);
- end;
- procedure TFileInfo.LoadFileDateTime;
- var
- ffd: TWin32FindData;
- h: THandle;
- begin
- FLastWriteDateTime := 0;
- h := FindFirstFile(PChar(FFileName), ffd);
- if h <> INVALID_HANDLE_VALUE then
- FLastWriteDateTime := FileTimeToDateTime(ffd.ftLastWriteTime);
- windows.FindClose(h);
- end;
- procedure TFileInfo.SetFileName(const Value: string);
- begin
- FFileName := Value;
- FSimpleName := ExtractSimpleFileName(FFileName);
- LoadFileDateTime;
- end;
- { TBackupFileList }
- constructor TBackupFileList.Create(AFileRange: Integer; APrefix: string);
- var
- i: Integer;
- FileInfo: TFileInfo;
- begin
- FFileRange := AFileRange;
- FPrefix := APrefix;
- FFiles := TList.Create;
- for i := 1 to FFileRange do
- begin
- FileInfo := TFileInfo.Create;
- FFiles.Add(FileInfo);
- end;
- end;
- destructor TBackupFileList.Destroy;
- begin
- ClearObjects(FFiles);
- FFiles.Free;
- inherited;
- end;
- function TBackupFileList.LastestFile: TFileInfo;
- var
- i: Integer;
- FileInfo: TFileInfo;
- begin
- Result := TFileInfo(FFiles.First);
- for i := 1 to FFiles.Count - 1 do
- begin
- FileInfo := TFileInfo(FFiles.Items[i]);
- if FileInfo.LastWriteDateTime > Result.LastWriteDateTime then
- Result := FileInfo;
- end;
- end;
- procedure TBackupFileList.LoadBackupFiles(APath: string);
- var
- i: Integer;
- FileInfo: TFileInfo;
- begin
- for i := 1 to FFileRange do
- begin
- FileInfo := TFileInfo(FFiles.Items[i-1]);
- FileInfo.FileName := Format('%s%d.mtf', [APath + FPrefix, i]);
- end;
- end;
- function TBackupFileList.OldestFile: TFileInfo;
- var
- i: Integer;
- FileInfo: TFileInfo;
- begin
- Result := TFileInfo(FFiles.First);
- for i := 1 to FFiles.Count - 1 do
- begin
- FileInfo := TFileInfo(FFiles.Items[i]);
- if FileInfo.LastWriteDateTime < Result.LastWriteDateTime then
- Result := FileInfo;
- end;
- end;
- end.
|