Вопрос, поднятый пользователем, касается использования функции GetFileDetailsFromAttr для определения размера файлов большего чем 10 ГБ в среде разработки Delphi. Пользователь использует версию Delphi Seattle (32 и 64 бит) и выражает сомнения относительно возможных недостатков функции, а также её работоспособности в различных операционных системах Windows.
Преимущества использования GetFileDetailsFromAttr
Функция GetFileDetailsFromAttr является альтернативой традиционному способу получения информации о файлах через FindFirst. Основное преимущество заключается в более высокой скорости работы, что особенно важно при обработке больших объемов данных. Пример кода на Object Pascal, предоставленный пользователем, демонстрирует использование функции GetFileAttributesEx для получения размера файла:
function GetFileDetailsFromAttr(pFileName: UnicodeString): Int64;
var
wfad: TWin32FileAttributeData;
wSize: LARGE_INTEGER;
begin
Result := 0;
if not GetFileAttributesEx(pFileName, GetFileExInfoStandard, @wfad) then
exit;
wSize.HighPart := wfad.nFileSizeHigh;
wSize.LowPart := wfad.nFileSizeLow;
Result := wSize.QuadPart;
end;
Использование UnicodeString вместо устаревшего WideString в версиях Delphi 2009 и выше, как рекомендовано в комментариях, может улучшить производительность. Функция GetFileAttributesEx поддерживается начиная с Windows XP, что делает её пригодной для использования в различных операционных системах.
Проблемы и Недостатки
Пользователь выразил обеспокоенность по поводу работоспособности функции для файлов размером более 9 ГБ, указывая на то, что типичные примеры из интернета не работают корректно для таких случаев. В комментариях обсуждается некорректное использование операций с битами для объединения значений nFileSizeHigh и nFileSizeLow. Правильный способ заключается в использовании структуры LARGE_INTEGER для корректного представления 64-битных значений.
Также обсуждается возможность использования записей для непосредственного присвоения размера файла результату функции, что может быть немного более эффективным с точки зрения количества инструкций, выполняемых компилятором. Однако, как отмечено в комментариях, необходимо провести тестирование для подтверждения фактической разницы в производительности.
Заключение
Использование GetFileDetailsFromAttr для определения размера больших файлов в Delphi может быть предпочтительным из-за его скорости. Однако важно убедиться, что код корректно обрабатывает 64-битные значения и не содержит ошибок, связанных с операциями на уровне битов. Рекомендуется провести тестирование на разных версиях Delphi и операционных системах для обеспечения совместимости и производительности.
Вопрос касается использования функции `GetFileDetailsFromAttr` для определения размера очень больших файлов в среде разработки Delphi и связанных с этим преимуществ, проблем и недостатков, а также их проверки на разных версиях Delphi
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.