Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.09;
Скачать: CL | DM;

Вниз

определить размер файла   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2002.12.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
4-28329
Алексей Ким
2002-10-23 18:05
2002.12.09
on top


6-28192
Dr.Shark
2002-10-02 13:28
2002.12.09
Как установить соединение по локальной сети?


1-27964
kex86
2002-11-27 13:55
2002.12.09
KeyDown


4-28356
Бульбаш
2002-10-28 17:42
2002.12.09
Подскажите плиз в каком модуле RXLib находится функция


6-28162
Leviathan
2002-10-13 23:14
2002.12.09
Cookies