Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.06.17;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.043 c
2-1180116372
A Programmer
2007-05-25 22:06
2007.06.17
Правильно ли создаётся и уничтожается TEdit?


1-1177069735
nali
2007-04-20 15:48
2007.06.17
Прозрачность в TImage


15-1178522752
TUser
2007-05-07 11:25
2007.06.17
Саркази - выбор французов


2-1180105148
ppcumax
2007-05-25 18:59
2007.06.17
Delphi7 > Delphi 2005


15-1179591112
Calibr
2007-05-19 20:11
2007.06.17
Задержка в *.bat





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