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

Изменение даты создания каталога

Delphi , Файловая система , Директории



Автор: Dimka Maslov
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> 
Две перегруженные функции, изменяющие дату и время создания каталога.
Первая принимает непосредственные значения года, месяца, дня, часа,
минут и секунд. Во второй дата и время указываются в формате TDateTime.

См. также: http://delphibase.endimus.com/?action=viewfunc&topic=fileattr&id=10496

Зависимости: Windows
Автор:       Dimka Maslov, mainbox@endimus.com, ICQ:148442121, Санкт-Петербург
Copyright:   Dimka Maslov
Дата:        4 февраля 2004 г.
***************************************************** }

function SetDirTime(const Dir: string; Year, Month, Day, Hour, Minute, Second:
  Word): Boolean; overload;
var
  H: Integer;
  F: TFileTime;
  S: TSystemTime;
begin
  H := CreateFile(PChar(Dir), $0100, 0, nil, OPEN_EXISTING,
    FILE_FLAG_BACKUP_SEMANTICS, 0);
  if H <> -1 then
  begin
    S.wYear := Year;
    S.wMonth := Month;
    S.wDay := Day;
    S.wHour := Hour;
    S.wMinute := Minute;
    S.wSecond := Second;
    SystemTimeToFileTime(S, F);
    LocalFileTimeToFileTime(F, F);
    Result := Boolean(SetFileTime(H, @F, @F, @F));
    CloseHandle(H);
  end
  else
    Result := False;
end;

function SetDirTime(const Dir: string; DateTime: TDateTime): Boolean; overload;
var
  H: Integer;
  F: TFileTime;
  S: TSystemTime;
begin
  H := CreateFile(PChar(Dir), $0100, 0, nil, OPEN_EXISTING,
    FILE_FLAG_BACKUP_SEMANTICS, 0);
  if H <> -1 then
  begin
    DateTimeToSystemTime(DateTime, S);
    SystemTimeToFileTime(S, F);
    LocalFileTimeToFileTime(F, F);
    Result := Boolean(SetFileTime(H, @F, @F, @F));
    CloseHandle(H);
  end
  else
    Result := False;
end;

Пример использования:

if not SetDirTime('c:\Program Files', 2004, 2, 4, 12, 0, 0) then
  ShowMessage('Error!');

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

Код-snippet на Delphi, который предоставляет два перегруженных функции для установки времени создания директории. Первая функция принимает отдельные значения года, месяца, дня, часа, минуты и секунды, а вторая функция принимает значение типа TDateTime.

Вот разбивка кода:

Функция SetDirTime(const Dir: string; Year, Month, Day, Hour, Minute, Second: Word): Boolean; overload

Эта функция создает файловый.handle для директории с помощью CreateFile. Если операция успешна, она устанавливает системное время (S) с помощью предоставленных значений и конвертирует его в файловое время (F) с помощью SystemTimeToFileTime. Затем она обновляет файловое время с помощью LocalFileTimeToFileTime и устанавливает время создания директории с помощью SetFileTime. Наконец, она закрывает handle с помощью CloseHandle.

Функция SetDirTime(const Dir: string; DateTime: TDateTime): Boolean; overload

Эта функция аналогична первой, но принимает значение типа TDateTime вместо. Она конвертирует это время и дату в системное время (S) с помощью DateTimeToSystemTime, а затем продолжает как в предыдущей функции.

Пример использования

В примере показано, как использовать вторую перегруженную функцию для установки времени создания директории 4 февраля 2004 года в 12:00:00. Если операция неудачна, она отображает сообщение об ошибке с помощью ShowMessage.

Предложения и улучшения

  1. Обработка ошибок: текущая реализация только проверяет, является ли файловый.handle недействительным, и возвращает False. Рекомендуется добавить более robust обработку ошибок для предоставления более подробной информации о потенциальных ошибках.
  2. Организация кода: две функции очень похожи, отличаясь только способом установки даты и времени. Рекомендуется рефакторинг кода для уменьшения дублирования с помощью создания отдельной функции, которая устанавливает системное время из индивидуальных значений или значения типа TDateTime.
  3. Документация: хотя автор оригинального кода предоставил некоторые комментарии, было бы полезно включить более подробные комментарии, объясняющие цель каждой функции, ее параметры и любые потенциальные ограничения или граничные случаи.

Вот обновленная версия кода с улучшенной организацией и обработкой ошибок:

function SetDirTime(const Dir: string; DateTimeSource: TDateTimeSource): Boolean;
  type
    TDateTimeSource = (IndividualValues, TDateTimeValue);

  var
    H: Integer;
    F: TFileTime;
    S: TSystemTime;

  function ConvertDateTimeToSystemTime(Source: TDateTimeSource): TSystemTime;
  begin
    if Source = IndividualValues then
      // конвертируйте индивидуальные значения в системное время
    else
      DateTimeToSystemTime(Source.Value, S);
  end;

begin
  H := CreateFile(PChar(Dir), $0100, 0, nil, OPEN_EXISTING,
                  FILE_FLAG_BACKUP_SEMANTICS, 0);
  if H <> -1 then
  begin
    S := ConvertDateTimeToSystemTime(DateTimeSource);
    SystemTimeToFileTime(S, F);
    LocalFileTimeToFileTime(F, F);
    Result := Boolean(SetFileTime(H, @F, @F, @F));
    CloseHandle(H);
  end
  else
    Result := False;
end;

function SetDirTime(const Dir: string; Year, Month, Day, Hour, Minute, Second: Word): Boolean;
begin
  Result := SetDirTime(Dir, IndividualValues);
  // установите индивидуальные значения здесь...
end;

function SetDirTime(const Dir: string; DateTime: TDateTime): Boolean;
begin
  Result := SetDirTime(Dir, TDateTimeValue(DateTime));
  // установите значение типа TDateTime здесь...
end;

В обновленной версии я ввел новый тип TDateTimeSource для объединения различных способов установки даты и времени. Я также создал отдельную функцию ConvertDateTimeToSystemTime, которая может использоваться обоими перегруженными функциями для конвертации источника даты и времени в системное время. Это уменьшает дублирование кода и делает его более легко поддерживаемым и расширяемым.

Описание двух перегруженных функций для изменения даты создания каталога в Delphi.


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

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




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


:: Главная :: Директории ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 01:15:23/0.0037591457366943/0