Главная страница
    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.008 c
1-28081
nick_vstu
2002-11-28 09:45
2002.12.09
Управление Винампом


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


3-27862
s_karm
2002-11-21 10:59
2002.12.09
сортировка


14-28268
Suntechnic
2002-11-18 16:31
2002.12.09
Это должно быть интересно...


7-28306
drou
2002-10-06 00:49
2002.12.09
как сделать програму невидемой





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