Форум: "Начинающим";
Текущий архив: 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.042 c