Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.012 c
3-27810
Sergey-ZZZ
2002-11-22 12:23
2002.12.09
SQL


1-27910
macrohead
2002-11-27 15:07
2002.12.09
base64


1-27947
Max
2002-11-29 09:13
2002.12.09
Делфи и Линух


4-28352
AndyDN
2002-10-28 12:21
2002.12.09
Размер стека потока


3-27853
AndrewVolkov
2002-11-20 23:36
2002.12.09
TDbLookupComboBox - обнуление строки???





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский