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

Перебор файлов в директории с использованием командной оболочки в Delphi для работы с версиями и исполняемыми файлами

Delphi , ОС и Железо , Windows

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

Решение проблемы

Для решения вашей задачи можно использовать функционал Delphi, связанный с работой с версиями файлов. Вот пример кода на Object Pascal, который позволяет перебрать все файлы в директории и вывести их версии:

type
  TVerInfo = packed record
    vMajor, vMinor, vRelease, vBuild: word;
  end;

function GetFileVerNumbers(const FileName: string): TVerInfo;
var
  len, dummy: cardinal;
  verdata: pointer;
  verstruct: pointer;
  InvalidVersion: TVerInfo = (vMajor: 0; vMinor: 0; vRelease: 0; vBuild: 0);
begin
  len := GetFileVersionInfoSize(PWideChar(FileName), dummy);
  if len = 0 then
    Exit(InvalidVersion);
  GetMem(verdata, len);
  try
    GetFileVersionInfo(PWideChar(FileName), 0, len, verdata);
    VerQueryValue(verdata, '\', verstruct, dummy);
    result.vMajor := HiWord(TVSFixedFileInfo(verstruct^).dwFileVersionMS);
    result.vMinor := LoWord(TVSFixedFileInfo(verstruct^).dwFileVersionMS);
    result.vRelease := HiWord(TVSFixedFileInfo(verstruct^).dwFileVersionLS);
    result.vBuild := LoWord(TVSFixedFileInfo(verstruct^).dwFileVersionLS);
  finally
    FreeMem(verdata);
  end;
end;

function GetFileVer(const FileName: string): string;
begin
  with GetFileVerNumbers(FileName) do
    result := IntToStr(vMajor) + '.' +
      IntToStr(vMinor) + '.' + IntToStr(vRelease) + '.' +
      IntToStr(vBuild);
end;

procedure TForm1.Button1Click(Sender: TObject);
const
  path = 'C:\WINDOWS'; // Замените на нужный путь
var
  SR: TSearchRec;
begin
  with Form1.Memo1 do
    Clear;
  if FindFirst(IncludeTrailingBackslash(path) + '*.exe', faAnyFile, SR) = 0 then
    try
      repeat
        Lines.Add(SR.Name + #9 + GetFileVer(IncludeTrailingBackslash(path) + SR.Name));
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
end;

Данный код предназначен для использования в приложении Delphi. Он перебирает файлы с расширением .exe в указанной директории, извлекает информацию о версии каждого файла и выводит результаты в компонент TMemo.

Альтернативные подходы

Для версий Delphi 2010 и выше, вы можете использовать более современный подход с использованием TDirectory.GetFiles. Это упростит ваш код, но стоит помнить о потенциальных проблемах, связанных с реализацией, как это было упомянуто в комментариях.

Заключение

Предоставленный пример кода является рабочим решением вашей задачи. Вы можете использовать его как есть, или адаптировать под конкретные нужды вашего проекта. Не забудьте заменить путь в константе path на путь к директории, которую вы хотите просканировать.

Создано по материалам из источника по ссылке.

Перебор файлов в директории и извлечение их версий с использованием командной оболочки в Delphi для работы с версиями и исполняемыми файлами.


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

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




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


:: Главная :: Windows ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 16:15:06/0.0051310062408447/1