Главная страница
    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.45 MB
Время: 0.013 c
1-27955
Alexander Vasjuk
2002-11-29 12:38
2002.12.09
Отображение связанных данных


1-28025
DN
2002-11-29 12:49
2002.12.09
Работа с INI


7-28318
netm
2002-10-09 22:34
2002.12.09
Как добавить путь к своей программе в Win2k?


7-28326
dr.Killer
2002-10-08 09:17
2002.12.09
CD-Rom


1-28104
Damage
2002-11-26 22:35
2002.12.09
fsStayOnTop не работает?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский