| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 | unit TenderBackupManager;interfaceuses  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.
 |