Вопрос, который вы задали, заключается в необходимости перебора всех файлов в указанной директории с целью извлечения их версий и имен. Это может быть полезно для различных задач, включая обновление программного обеспечения, диагностику системы или обеспечение совместимости с определенными версиями приложений.
Решение проблемы
Для решения вашей задачи можно использовать функционал 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
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.