Форум: "WinAPI";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];
Внизопределить размер файла Найти похожие ветки
← →
Nomad.kz (2002-10-23 14:58) [0]Пользуюсь FindFirstFile (FindNextFile), в структуре WIN32_FIND_DATA определены поля:nFileSizeHigh & nFileSizeLow и написано, что итоговый размер файла (в байтах)вычисляется по формуле:
(nFileSizeHigh * MAXDWORD) + nFileSizeLow. Только это брехня.
Кто подскажет, как быть или где грабли?
← →
Хонь-юнь (2002-10-23 17:17) [1]>Только это брехня
???
>как быть
GetFileSize() Win32 API -- можно проверить, брехня, или нет!
← →
Nomad.kz (2002-10-24 10:53) [2]Насчет GEtFileSize - это понятно, т.к. она в хэлпе прописана. Просто это надо открывать файл, читать его размер, затем закрывать файл, а это не есть быстро.
У меня же проблема в том, что поиск файлов мне все-равно делать надо (FindFirstFile ...), хотелось получить размер всех найденных файлов сразу же ...
Может эта константа MAXWORD не такая, как виндами задумана :-\
← →
gek (2002-10-24 11:08) [3]// возвращает размер файла в кб
function GetLogFileSize(const Fn:string):longint;
var
DirInfo : TSearchRec;
begin
if FindFirst(Fn,faAnyFile,DirInfo) = 0 then result:=(DirInfo.Size div 1024)
else result:=0;
FindClose(DirInfo);
end;
У меня нормально вычисляет
правда на больших размерах файла не пробовал
← →
Bigbugov (2002-10-24 15:20) [4]А зачем нужно это nFileSizeHigh * MAXDWORD? Такие большие файлы? А nFileSizeLow всё корректно возвращает... Вот только с огромными файлами проблема... Просто я никогда не использовал хай и всё работало... Странно, да? Ну используйте FindFirst/FindNext...
← →
Pumpkin (2002-10-24 22:12) [5]Може ты забыл что нужно брать Int64;
procedure TForm1.Button1Click(Sender: TObject);
var
SizeHigh, SizeLow: DWORD;
SizeFull: Int64;
begin
SizeHigh := $CCCC;
Sizelow := $AAAA;
SizeFull := Int64( SizeHigh ) shl 32 + SizeLow;
Caption := IntToHex( SizeFull, 16 );
end;
← →
Nomad.kz (2002-10-28 11:18) [6]2Pubpkin
Дык, насколько я понимаю, формула SizeHigh*MAXWORD+SizeLow и есть то же самое ...
а вот, просто nSizeFileLow (без nSizeFileHigh) посмотреть я и не догадался :-)
← →
han_malign (2002-10-28 12:15) [7]Не явное приведение типа DWORD((_dword shl sizeof(DWORD)))=0
чтобы работало коректно надо _int64:=_HighDword; _int64:=_int64 shl sizeof(DWORD)or _LowDword;
еще корректней
var ll: TLargeInteger;
begin
ll.HighPart:=nFileSizeHigh;
ll.LowPart:=nFileSizeLow;
Result:=ll.QuardPart;
← →
Nomad.kz (2002-10-29 11:38) [8]2All
thanks за помощь.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c