Форум: "Потрепаться";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.033 c