Вниз
Скачать: CL | DM;

GetFileSize   Найти похожие ветки 

← →
Ilya____   (2004-10-19 15:35) [0]

Подскажите как правильно сделать.
У меня такая функция

function GetFileSize(const FileName: TFileName): Longint;
var
 SearchRec: TSearchRec;
begin
 try
   if FindFirst(FileName, faAnyFile, SearchRec) = 0 then
     Result := SearchRec.Size
   else
     Result := -1;
 finally
   FindClose(SearchRec);
 end;
end;

Но если размер файла больше 2147483647 байт,
то функция возвратит неправильное значение.
Как быть ?


← →
clickmaker ©   (2004-10-19 15:43) [1]

FindFirstFile

WIN32_FIND_DATA -> nFileSizeHigh, nFileSizeLow


← →
Ilya___   (2004-10-19 16:16) [2]

Хотелось бы по подробнее


← →
Anatoly Podgoretsky ©   (2004-10-19 16:33) [3]

Ilya___   (19.10.04 16:16) [2]
В справке очень подробно, что именно из нее не понятно?


← →
Ilya___   (2004-10-19 17:43) [4]

Если размер файла больше 2147483647 байт,
тогда функция аозвращает неправильное значение.
Как сделать чтобы функция выдавала правильное
значение ?


← →
Palladin ©   (2004-10-19 18:40) [5]

FindFirstFile

WIN32_FIND_DATA -> nFileSizeHigh, nFileSizeLow


← →
clickmaker ©   (2004-10-19 18:42) [6]

похоже, в цикл вошли...


← →
Palladin ©   (2004-10-19 18:55) [7]

:)))


← →
begin...end ©   (2004-10-19 19:01) [8]


> Ilya____   (19.10.04 15:35)

К тому же тип результата твоей функции не позволяет это сделать.


← →
DVM ©   (2004-10-19 19:05) [9]


> Ilya____   (19.10.04 15:35)  

Вот для размера папки, для файла переделаешь сам.

function GetDirectorySize(const Path: string): Int64;
var
 FD : TWin32FindData;
 FH : THandle;
 TempSize: TULargeInteger;
begin
 Result := 0;
 if Path="" then exit;
 if not(DirExists(Path)) then exit;
 FH := FindFirstFile( PChar( Path + "*.*" ), FD );
 repeat
   if (FH<>INVALID_HANDLE_VALUE) and (FD.cFileName <> string(".")) and
                                              (FD.cFileName<>string("..")) then
     begin
       if (FILE_ATTRIBUTE_DIRECTORY and FD.dwFileAttributes) <> 0 then
         Inc(Result, GetDirectorySize(Path + FD.cFileName + "\"))
       else
         begin
           TempSize.LowPart := FD.nFileSizeLow;
           TempSize.HighPart := FD.nFileSizeHigh;
           Inc(Result, TempSize.QuadPart);
         end;
     end;
 until FindNextFile(FH,FD) = false;
 FindClose(FH);
end;



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.022 c
1-1098796405
Андерсон
2004-10-26 17:13
2004.11.07
Передача фокуса формам


14-1098286900
Profi
2004-10-20 19:41
2004.11.07
Помогите решить


14-1098335350
Rouse_
2004-10-21 09:09
2004.11.07
Юрия Федорова с днем рождения !!!


1-1098475502
voron
2004-10-23 00:05
2004.11.07
Как работать в Делфи с очень большими числами


14-1098048688
GuAV
2004-10-18 01:31
2004.11.07
Exception ;-)




   Наверх