Главная страница
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.033 c
1-27961
MiXenWorK
2002-11-29 14:14
2002.12.09
скроллинг


1-28020
Checist [root]
2002-11-30 03:06
2002.12.09
Несколько элементов одного типа (ОЧЕНЬ НУЖНА ПОМОЩЬ)


3-27899
Avsam
2002-11-19 18:56
2002.12.09
Ошибка Oracle ORA-00604 и ORA-01000


1-28070
Vagrant
2002-11-27 01:58
2002.12.09
Runtime error 216


14-28201
leon83
2002-11-20 07:50
2002.12.09
Как писать по-русски в DOS-консоли в XP?