Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Выставить дату для файла

Delphi , Файловая система , Файлы

Выставить дату для файла

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

function SetFileDateTime(FileName: string; NewDateTime: TDateTime): Boolean;
 var
   FileHandle: Integer;
   FileTime: TFileTime;
   LFT: TFileTime;
   LST: TSystemTime;
 begin
   Result := False;
   try
     DecodeDate(NewDateTime, LST.wYear, LST.wMonth, LST.wDay);
     DecodeTime(NewDateTime, LST.wHour, LST.wMinute, LST.wSecond, LST.wMilliSeconds);
     if SystemTimeToFileTime(LST, LFT) then
     begin
       if LocalFileTimeToFileTime(LFT, FileTime) then
       begin
         FileHandle := FileOpen(FileName, fmOpenReadWrite or
           fmShareExclusive);
         if SetFileTime(FileHandle, nil, nil, @FileTime) then
           Result := True;
       end;
     end;
   finally
     FileClose(FileHandle);
   end;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   if OpenDialog1.Execute then
     if SetFileDateTime(OpenDialog1.FileName, now) then
       ShowMessage('Date set to now !');
 end;

Перевод на русский язык:

Это программное обеспечение Delphi, которое устанавливает дату и время существующего файла в указанную дату и время.

Функция SetFileDateTime принимает два параметра: FileName (строка, представляющая имя файла) и NewDateTime (значение типа TDateTime, представляющее новую дату и время для установки).

Вот, что функция делает:

  1. Она пытается декодировать NewDateTime в его составные части (год, месяц, день, час, минута, секунда, миллисекунда).
  2. Если это успешно, она конвертирует эти части в структуру TSystemTime.
  3. Затем она вызывает функцию SystemTimeToFileTime, чтобы конвертировать TSystemTime в TFileTime.
  4. Далее она вызывает функцию LocalFileTimeToFileTime, чтобы конвертировать TFileTime в другой TFileTime, подходящий для использования с Windows API.
  5. Наконец, она открывает файл в эксклюзивном режиме чтения-записи с помощью FileOpen и, если это успешно, устанавливает дату и время файла с помощью SetFileTime. Функция возвращает True, если операция была успешной, или False в противном случае.

Процедура Button1Click - это callback, который вызывается при клике кнопки на форме. Она использует компонент OpenDialog для запроса у пользователя выбрать файл и затем вызывает функцию SetFileDateTime с выбранным именем файла и текущей датой и временем (now). Если операция была успешной, она отображает сообщение с текстом "Дата установлена в now !".

Вот некоторые предложения по улучшению:

  1. Рассмотрите добавление обработки ошибок для случаев, когда файл не может быть открыт или изменен.
  2. Вам может потребоваться добавить валидацию ввода, чтобы убедиться, что параметр FileName является валидным и существует на диске.
  3. Вместо использования FileOpen и FileClose, рассмотрите использование блока try-finally для обеспечения закрытия файла, даже если возникла ошибка.
  4. Если вы планируете использовать эту функцию с файлами на сетевых разделах или removable media, вам может потребоваться добавить дополнительную обработку ошибок для случаев, когда файловая система не доступна.

Вот обновленная версия кода:

function SetFileDateTime(FileName: string; NewDateTime: TDateTime): Boolean;
var
  FileHandle: Integer;
  FileTime: TFileTime;
  LFT: TFileTime;
  LST: TSystemTime;
begin
  Result := False;
  try
    DecodeDate(NewDateTime, LST.wYear, LST.wMonth, LST.wDay);
    DecodeTime(NewDateTime, LST.wHour, LST.wMinute, LST.wSecond, LST.wMilliSeconds);

    if SystemTimeToFileTime(LST, LFT) then
    begin
      if LocalFileTimeToFileTime(LFT, FileTime) then
      begin
        try
          FileHandle := TFile.Open(FileName, fmOpenReadWrite or fmShareExclusive);
          try
            if SetFileTime(FileHandle.Handle, nil, nil, @FileTime) then
              Result := True;
          finally
            FileHandle.Free;
          end;
        except
          on E: Exception do
            ShowMessage('Ошибка установки даты и времени файла: ' + E.Message);
        end;
      end;
    end;
  finally
    if Assigned(FileHandle) then
      FileHandle.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    try
      SetFileDateTime(OpenDialog1.FileName, now);
      ShowMessage('Дата установлена в now !');
    except
      on E: Exception do
        ShowMessage('Ошибка установки даты и времени файла: ' + E.Message);
    end;
  end;
end;

Функция SetFileDateTime позволяет изменить дату и время для указанного файла на компьютере, используя язык программирования Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Файлы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-24 20:03:17/0.003835916519165/0