Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.17;
Скачать: CL | DM;

Вниз

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

 
unnamed777   (2007-05-22 10:43) [0]

GetFileSize не может получить доступ к уже открытому файлу, как ещё можно узнать рзмер файла?


 
Сергей М. ©   (2007-05-22 10:50) [1]

Открыть его средствами TFileStream и прочитать св-во TFileStream.Size


 
Loginov Dmitry ©   (2007-05-22 10:56) [2]

> Открыть его средствами TFileStream и прочитать св-во TFileStream.Size


Если файл кем-то уже открыт в монопольном режиме, то даже такой подход не сработает.


 
Loginov Dmitry ©   (2007-05-22 10:58) [3]

Можно FindFirst заюзать, но и он не всегда сможет определить размер файла (в таких случаях в качестве размера файла возвращается 0).


 
Плохиш ©   (2007-05-22 11:00) [4]

FindFirstFile


 
Anatoly Podgoretsky ©   (2007-05-22 19:17) [5]

> Loginov Dmitry  (22.05.2007 10:58:03)  [3]

С чего бы это, он же не обращается к файлу, а только к записи каталога


 
Loginov Dmitry ©   (2007-05-22 20:25) [6]

> С чего бы это, он же не обращается к файлу, а только к записи
> каталога


Заметил данное явление при работе с табличками Paradox. Программа каждые 5 секунд (в отдельном потоке) сканирует все db-файлы, и если размер их уменьшился, то фиксирует это в логе. Так вот иногда в лог запысывается, что db-файл имеет нулевой размер. Получается, что функция поиска в некоторых случаях не может определить истинный размер файла, и возвращает 0. Подозреваю, что это происходит, когда файл открыт, и в момент выполнения поиска в него производится запись.


 
Джо ©   (2007-05-23 02:26) [7]

> [6] Loginov Dmitry ©   (22.05.07 20:25)
> > С чего бы это, он же не обращается к файлу, а только к
> записи
> > каталога
>
>
> Заметил данное явление при работе с табличками Paradox.
> Программа каждые 5 секунд (в отдельном потоке) сканирует
> все db-файлы, и если размер их уменьшился, то фиксирует
> это в логе. Так вот иногда в лог запысывается, что db-файл
> имеет нулевой размер. Получается, что функция поиска в некоторых
> случаях не может определить истинный размер файла, и возвращает
> 0. Подозреваю, что это происходит, когда файл открыт, и
> в момент выполнения поиска в него производится запись.

Возможно, ты неправильно используешь FindFirst & FindNext. Приведя конкретный код, в этом можно было бы попробовать разобраться. Пока только есть некоторые подозрения.


 
Loginov Dmitry ©   (2007-05-23 09:14) [8]

> Возможно, ты неправильно используешь FindFirst & FindNext.


Шютник :)


> Приведя конкретный код, в этом можно было бы попробовать
> разобраться


Ну разбирайся :)


function BuildDBFileList(APath: string; AFileNames: TStrings; var ADateList: TFileDateList;
 var ASizeList: TFileSizeList): Integer;
var
 SR: TSearchRec;
begin
 AFileNames.Clear;
 ADateList := nil;
 ASizeList := nil;
 
 if FindFirst(APath + "*.db", faAnyFile, SR) = 0 then
 try
   repeat
     if FileExists(APath + SR.Name) then
     begin
       AFileNames.Add(SR.Name);
       SetLength(ADateList, Length(ADateList) + 1);
       SetLength(ASizeList, Length(ASizeList) + 1);

       ADateList[High(ADateList)] := FileDateToDateTime(SR.Time);
       ASizeList[High(ASizeList)] := SR.Size;
     end;
   until FindNext(SR) <> 0;
 finally
   FindClose(SR);
 end;
 Result := AFileNames.Count;
end;


 
Джо ©   (2007-05-23 13:08) [9]

> [8] Loginov Dmitry ©   (23.05.07 09:14)
>       ASizeList[High(ASizeList)] := SR.Size;

Попробуй вот так, сразу учтя файлы, размер которых не больше 2 Гб:

function GetLongFileSize (AFileName: string): Int64;
var
 SR: TSearchRec;
begin
 if FindFirst(AFileName,faAnyFile,SR) = 0 then
 begin
   Result := MakeInt64(SR.FindData.nFileSizeHigh,
     SR.FindData.nFileSizeLow);
   FindClose (SR);
 end
 else
   Result := -1;
end;


 
Джо ©   (2007-05-23 13:10) [10]

> не больше 2 Гб:

больше 2 Гб.


 
Loginov Dmitry ©   (2007-05-23 13:17) [11]

Размер табличек не превышает 30 МБайт



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

Текущий архив: 2007.06.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
8-1157263841
McFalu
2006-09-03 10:10
2007.06.17
Вопрос о 32 битном битмапе.


15-1179357258
Bad_B
2007-05-17 03:14
2007.06.17
Это можно реализовать? (чуток о БД)


15-1178974275
lzma
2007-05-12 16:51
2007.06.17
Ketmar мужык!


2-1180348039
Чип
2007-05-28 14:27
2007.06.17
Фильтрация через компонент table (по 1 значению)


2-1180426342
_vl_
2007-05-29 12:12
2007.06.17
Форматирование числа