Прежде всего, FileSize должен быть определен как UInt64, а не Int64 ...
UInt64 (недоступно в ранних версиях Delphi) - это 64-разрядное целое число без знака, или QWORD.Это ожидаемый тип для FileSize (вы не ожидаете отрицательного размера файла, не так ли?).
ИМХО, вы могли бы кодировать - используя UInt64, потому что мы не хотим иметь некоторые значениясообщается как отрицательное:
FileSize := UInt64(Info.nFileSizeLow) or (UInt64(Info.nFileSizeHigh) shl 32));
Но в Delphi 7 он выдает точно такой же код, что и ваш.
FileSize := Info.nFileSizeLow or (Int64(Info.nFileSizeHigh) shl 32));
Так что, возможно, существует некоторая регрессия компилятора.Не могли бы вы взглянуть на сгенерированный asm-код (пошаговый отладчик, затем Alt + F2) и посмотреть, есть ли разница.Но это маловероятно ...
Во всех случаях вот лучший (и более быстрый) код:
with Int64Rec(FileSize) do
begin
Lo := Info.nFileSizeLow;
Hi := Info.nFileSizeHigh;
end;
Официальная документация MSDN 1017 * говорит о структуре WIN32_FIND_DATA:
nFileSizeHigh: старшее значение DWORD размера файла в байтах.
Это значение равно нулю, если размер файла не превышает MAXDWORD.
Размер файла равен (nFileSizeHigh * (MAXDWORD + 1)) + nFileSizeLow.
nFileSizeLow: младшее значение DWORD размера файла в байтах.
Вот результирующий код:
FileSize := UInt64(Info.nFileSizeLow)+(UInt64(Info.nFileSizeHigh)*UInt64(1 shl 32));
Довольно забавное определение, действительно ...