Определение размера файла
Передо мной никогда не стояла задача определения размера файла Delphi. Но после того как где-то увидел вопрос: "как определить размер файла", мне тоже стало интересно.
Определение размера файла это то же самое, что определение роста
удава в известном мультике! Сколько байтов в него поместится, таков и
его размер. План такой:
- Задаём тип данных размером 1 байт. Это будет запись.
- Определяем файловую переменную этого типа.
- Начинаем с начала файла и переходим к концу. Сколько переходов - столько и байтов в файле!
Программа будет состоять из Формы, на которую бросим компонент выбора файла - OpenDialog и кнопку Button, по нажатию на которую и будем выбирать файл. Вот, собственно, и обработчик этой кнопки:
procedure TForm1.ButtonClick(Sender: TObject);
type TSize = Record
Bait: byte;
end;
var F: File of TSize;
Size: Integer;
begin
Size:=0;
with OpenDialog1 do
if Execute then
begin
AssignFile(F, FileName);
Reset(F);
while (not EOF(F)) do
begin
Size:=Size+1;
seek(F, Size);
end;
Form1.Caption:=IntToStr(Size); // Выводим информацию о размере в заголовок Формы
CloseFile(F);
end;
end;
Программа была написана за пять минут, что называется, "на коленке".
Она работает, и для файлов размером до нескольких мегабайт время
ожидания результата невелико, несколько секунд. Для больших файлов
ожидание затягивается, и программа выглядит "зависшей". Можно изменить
программу так, чтобы она считала килобайты (заменить seek(F, Size) на seek(F, Size*1024) ). Скорость работы возрастёт в 1024 раза, и уже будет приемлемой.
Это была ещё одна демонстрация приёмов работы с файлами. А на самом
деле всё гораздо проще! Размер файла возвращается встроенной функцией FileSize. А файл достаточно описать как имеющий тип byte:
procedure TForm1.ButtonClick(Sender: TObject);
var F: File of byte;
Size: Integer;
begin
with OpenDialog1 do
if Execute then
begin
AssignFile(F, FileName);
Reset(F);
Size:=Filesize(F);
Form1.Caption:=IntToStr(Size); // Выводим информацию о размере в заголовок Формы
CloseFile(F);
end;
end;
Есть альтернативный способ работы с файлами Delphi, в котором
файл рассматривается как объект. Там также есть встроенные способы
определения размера файла. Также приведу процедуру целиком:
procedure TForm1.ButtonClick(Sender: TObject);
var F: TFileStream;
begin
with OpenDialog1 do
if Execute then
begin
F:=TFileStream.Create(Filename, fmOpenRead);
Caption:=IntToStr(F.Size);
F.Free;
end;
end;
|
Категория: Работа с файлами | Добавил: nazgull (24.12.2012)
|
Просмотров: 990
| Рейтинг: 0.0/0 |
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
|