Delphi检查日期以在预定的时间制作备份文件

时间:2014-01-17 20:17:51

标签: delphi zip backup scheduled-tasks

我有一个程序写入日志文件并将其拉链。我想设置它以便它会在一个月之后将日志文件和压缩文件清除并清除文件并重置它以在再过一个月后再次执行

procedure SendToLog(Const MType : twcMTypes; Const callProgram, callPas, callProssecs, EMessage, zipName : String; AddlStr : String = '' );
Const
  MTValues = 'EDS';
var
  LogFile      : TextFile;
  LogName      : String;
  EString      : String;
begin
  logName := WebLogPath;              // þ for delimeter
  EString := MTValues[ Ord( MType )+1] + PC + FormatDateTime( 'mm/dd/yyyy hh:nn:ss.zzz', Now )
     + PC + callProgram + PC + callpas + PC + callProssecs + PC + EMessage;
  Assign( LogFile, LogName );
  if FileExists(LogName) then
    Append( LogFile )   { Open to Append }
  else
  begin
    Rewrite( LogFile );   { Create file }
  end;
  Writeln( LogFile, EString );
  Close( LogFile );
  ArchiveFiles('C:', 'mytest.log', 'C:', zipName + '.zip', 'M');

我想知道我是如何制作的,以便每次程序记录某些内容时它会检查一个月是否已经过去,然后它会将所有内容压缩到一个新文件中并重置日志。

2 个答案:

答案 0 :(得分:0)

您必须:

  1. 在某个地方跟踪上次写入日期,并在应用重新启动时持续跟踪。

  2. 使用Win32 API GetFileTime()函数查询日志文件本身的上次写入日期。

  3. 将当前日期放在您编写的每个日志条目上,然后您可以查找日志文件的末尾并从上次写入的日志条目中读取日期。

  4. 每次要编写新的日志条目时,将上一个已知日期的月份+年份与当前日期进行比较,然后在当前日期更高时压缩+重置日志文件。

答案 1 :(得分:0)

因此,您只需检查创建日期,然后决定是否需要新文件。

procedure SendToLog(Const MType : twcMTypes; Const callProgram, callPas, callProssecs, EMessage, zipName : String; AddlStr : String = '' );
Const
  MTValues = 'EDS';
  MaxAgeBeforeNewLogFile = 30; // 30 days, in TDateTime type convention
var
  LogFile      : TextFile;
  LogName      : String;
  EString      : String;
  NeedZipLogFile : Boolean; ZipName: String;
begin
  logName := WebLogPath;              // þ for delimeter
  EString := MTValues[ Ord( MType )+1] + PC + FormatDateTime( 'mm/dd/yyyy hh:nn:ss.zzz', Now )
     + PC + callProgram + PC + callpas + PC + callProssecs + PC + EMessage;

  NeedZipLogFile := False;
  if System.IOUtils.TFile.Exists( LogName ) then
     NeedZipLogFile := Now() - System.IOUtils.TFile.GetCreationTime( LogName ) 
                        > MaxAgeBeforeNewLogFile;


  if NeedZipLogFile then begin
     ZipName := _Generate_New_Non_Used_And_Proper_Name_For_Archive();
     _Save_Log_Into_Zip( LogName );

     If _Secure_Keeping_Of_Logs_Is_Very_Very_Important then begin
        _Flush_Windows_File_Cache_To_Disk( ZipName );
        _Read_Zipped_Log_Into_Memory( ZipName, ExtractFileName( LogName ), _Temp_Memory_Buffer );
        _Compare_With_Old_Log_File_And_Ensure_Nothing_Was_Lost( LogName, _Temp_Memory_Buffer);
     end;

     DeleteFile( LogFile);
  end;

  System.IOUtils.TFile.AppendAllText( LogFile, EString );
end;