Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Процедуры работы с датой и временем создания/модификации файла




Для работы с датой создания файла используется процедура:

GetFTime (VAR F; VAR Time: LongInt);

которая возвращает время и дату создания файла. Переменная F должна быть файловой переменной.

Время и дата возвращаются в переменной Time в упакованном формате в виде двойного слова (32 бита), и для их распаковки используется процедура

UnpackTime (Time: LongInt; VAR DT: DateTime);

Эта процедура преобразовывает значение, переданное в параметре Time, в запись DT типа DateTime (дата и время). Тип DateTime описан в модуле DOS следующим образом:

 

TYPE

DateTime = RECORD

Year, Month, Day, Hour, Min, Sec: WORD;

END;

 

Таким образом, объявив в программе переменную типа DateTime, можно получить доступ к дате и времени создания или последней модификации файла.

Процедуры GetFTime и UnpackTime используются для считывания даты и времени создания файла. Для того, чтобы изменить эту величину, используются две другие процедуры: PackTime и SetFTime.

Процедура:

PackTime (VAR T: DateTime; VAR Time: LongInt);

преобразовывает запись типа DateTime в двойное слово, используемое процедурой:

SetFTime (VAR F; Time: LongInt);

Процедура SetFTime устанавливает дату создания файла. О том, как прошла данная операция, можно узнать из переменной DosError, описанной в модуле DOS. В случае успешного завершения переменная DosError будет содержать значение 0. В случае неудачи код ошибки может быть только 6 (разрушен заголовок файла).

Файл, для которого необходимо изменить дату создания, должен быть открыт для чтения. Если файл открыт процедурой Rewrite, то после того, как дата его создания изменена и в конце работы файл будет закрыт процедурой Close, дата создания автоматически обновится, т.е. установится текущая системная дата. Поэтому, если происходит запись в файл, а затем требуется изменить дату его создания, можно просто выполнить перед процедурой SetFTime команду Reset, т.е. открыть файл для чтения.

Необходимость в операциях чтения и изменения даты создания файла может возникнуть, например, при создании программ, контролирующих файлы на заражение вирусами, или при создании резервных копий файлов, которые были созданы за последнее время [1].

 

ЗАДАНИЯ

 

1. Написать программу на языке Паскаль, позволяющую изменять системную дату.

2. Написать программу на языке Паскаль, позволяющую считывать и изменять системное время. Текущее время выводить по формату хх:хх:хх.хх. Новое системное время задавать с клавиатуры.

3. Написать программу, считывающую и изменяющую дату и время создания произвольного файла. Имя файла, а также новые дату и время файла, задавать с клавиатуры.

 

Лабораторная работа № 2

Проверка состояния диска

 

Модуль DOS в Турбо-Паскаль содержит ряд функций и процедур для работы с диском. С их помощью можно осуществлять контроль наличия свободного пространства на диске, контроль правильности записи на диск, а также определять общий объем памяти диска. Функция:

DiskFree (Drive: BYTE): LongInt;

возвращает количество свободных байтов на указанном диске, где Drive задает номер диска: 0 – текущий диск, т.е. тот диск, с которого запущена программа; 1 - дисковод А; 2 - дисковод B; 3 - диск С; 4 - диск D и т.д. Если номер диска задан некорректно, то функция возвращает значение -1. Таким образом, всегда есть возможность проконтролировать правильность вызова функции. Функция:

DiskSize (Drive: BYTE): LongInt;

возвращает общее количество байтов на указанном диске, где Drive задает номер диска. Номер диска задается так же, как и для функции DiskFree (0 – текущий диск; 1 – дисковод А и т.д). Если номер диска задан некорректно, то функция возвращает значение -1.

Процедура GetVerify используется для получения значения флага проверки DOS, имеющего название VERIFY. Этот флаг служит для определения метода записи данных на диск. Если VERIFY находится во включенном состоянии, т.е. он равен ON (истина), то после того, как информация записана на диск, она снова читается и сверяется с оригиналом (verify – «проверять»). Если же флаг находится в выключенном состоянии, т.е. OFF (ложь), то информация записывается на диск без проверки. Существуют различные мнения по поводу того, стоит ли включать данный флаг во время работы, но практика показывает, что винчестер – довольно надежное устройство и информация на него либо записывается хорошо, либо не записывается вовсе. К тому же данная проверка правильности записи сильнее изнашивает винчестер и дисководы (ведь требуется записать, а затем еще и считать) и значительно увеличивает время записи. Поэтому включать этот флаг необходимо, когда ценная информация записывается с винчестера на гибкие диски. Формат процедуры GetVerify следующий:

GetVerify (VAR Verify: Boolean);

Процедура помещает в параметр Verify значение ON или OFF. Если Verify равен ON, происходит проверка правильности записи на все диски, если OFF – информация записывается без проверки [2].

Если возникает необходимость удостовериться в правильности записи важной информации на диск, необходимо включить флаг проверки. Для этого предназначена процедура:

SetVerify (Verify: Boolean);

которая устанавливает или отменяет флаг проверки в зависимости от значения параметра Verify.

 

ЗАДАНИЯ

 

1. Написать программу на языке Паскаль для вывода на экран общего, свободного и занятого дискового пространства для произвольного логического диска (в Мб); для дискеты (в Кб). Диск задавать с клавиатуры. Рассчитать и вывести на экран суммарный объем использованного и неиспользованного дискового пространства компьютера.

2. Написать программу на языке Паскаль для вывода на экран текущего значения флага проверки DOS verify и изменения его значения на противоположное.

 

Лабораторная работа № 3

Работа с файлами: поиск

 

Для работы с файлами в модуле Dos определены следующие процедуры и функции:

1. функция FExpand -дополнение имени файла до полного значения (текущий путь, имя, расширение);

2. функция FSearch -поиск файла в списке каталогов;

3. процедура FindFirst -поиск первого файла с заданным именем и атрибутами;

4. процедура FindNext -поиск следующего файла с заданным именем и атрибутами;

5. процедура FSplit -разбиение полного имени файла на составные части (путь, имя, расширение);

6. процедура GetFAttr -получение текущих атрибутов файла;

7. процедура SetFAttr -задание новых атрибутов файла.

Работа с файлами в Турбо Паскаль приводит к необходимости использования терминологии и средств MS-DOS. Иногда возникает необходимость поиска файлов с одинаковым именем, поиска по шаблону, выделения нужного файла из найденной группы файлов.

Процедуры FSplit, FExpand, FSearch, FindFirst, FindNext упрощают решение этих задач.

Пусть необходимо определить имена всех файлов с расширением.PAS, которые находятся в определенном каталоге. Для этого используются следующие процедуры:

FindFirst (Path: STRING; Attr: WORD; VAR S: SearchRec);

FindNext (VAR S: SearchRec);

где Path — путь и имя для поиска; Attr — задаваемые атрибуты файла; S — переменная типа SearchRec, который описан ниже.

Процедура FindFirst ищет первый файл с заданным именем и набором атрибутов в указанном каталоге. Процедура FindNext ищет следующий файл с атрибутами, заданными при вызове FindFirst, если имя было задано шаблоном.

Обе эти процедуры используют переменную типа SearchRec для просмотра каталога. Информация о каждом файле, найденная FindFirst или FindNext, возвращается в переменной этого типа.

Тип SearchRec описан в модуле Dos следующим образом:

TYPE

SearchRec = RECORD

Fill: ARRAY [1..21] OF BYTE;

Attr: BYTE;

Time: LongInt;

Size: LongInt;

Name: STRING [12];

END;

 

Поле Attr содержит атрибуты файла, которые определяются константами атрибутов файла, описанными в модуле Dos (табл. 1). Поле Time содержит дату и время создания файла в упакованном виде (для распаковки необходимо использовать процедуру UnpackTime). Поле Size содержит размер файла в байтах. Поле Name содержит имя найденного файла. Поле Fill содержит служебную информацию MS-DOS и не должно модифицироваться [1-2].

Константы атрибутов файла могут принимать следующие значения:

Таблица 1

Название Значение
ReadOnly (только для чтения) $01
Hidden (скрытый) $02
SysFile (системный) $04
VolumeID (заголовок тома) $08
Directory (каталог) $10
Archive (архивный) $20
AnyFile (любой файл) $3F

 

Если в параметре Path не указан путь, а приведено только имя файла или шаблон, то поиск будет осуществляться в текущем каталоге. Например:

FindFirst (‘*.PAS’, AnyFile, S);

Если же надо искать файл в другом каталоге, то в параметре Path указывается путь к нужному каталогу.

Процедура FindNext ищет следующий файл с именем и атрибутами, заданными при вызове FindFirst, если имя файла было задано шаблоном. Если FindNext не находит больше файлов, в системной переменной DosError устанавливается значение 18. В случае успешного завершения переменная DosError будет содержать 0.

Процедуры FindFirst и FindNext при поиске файла (группы файлов) просматривают только указанный каталог. Если же возникает необходимость поиска в различных каталогах, то используется функция FSearch. Функция имеет формат:

FSearch (path: PathStr; DirList: STRING): PathStr;

где Path — путь и имя файла, который необходимо найти. Тип PathStr описан в модуле Dos, как строковый тип STRING[79]. DirList - список каталогов, в которых будет проводиться поиск. Каталоги в списке должны быть разделены символом «;» аналогично тому, как это делается в команде MS-DOS PATH.

Поиск всегда начинается с текущего каталога текущего диска. В случае удачного поиска функция возвращает строку, в которой содержится полное имя файла (путь и имя). В случае неудачи возвращается пустая строка.

Примеры:

F:= FSearch (‘NDD.EXE’, ‘C:\WINDOWS; C:\’);

P:= FSearch(‘BP.EXE’, GetEnv(‘PATH’));

 

Для работы с именами файлов используются также процедура FSplit и функция FExpand.

Процедура FSplit позволяет разбить полный путь к файлу на три компонента. Процедура описывается следующим образом:

FSplit (Path:PathStr; VAR Dir:DirStr; VAR Name:NameSrt;

VAR Ext:ExtStr);

В параметре Path указывают полный путь к файлу. В переменной Dir возвращается путь без имени файла. Например, если полный путь, заданный в Path, имеет вид:

‘C:\NU\NDD.EXE’

то переменная Dir будет содержать - ‘C:\NU\’. В переменной Name возвращается имя файла без расширения. В данном случае будет возвращено NDD. В переменной Ext будет помещено расширение ‘.EXE’ [3].

Типы для работы с именами файлов определены в модуле Dos следующим образом:

TYPE ComStr = STRING[127];

PathStr = STRING[79];

DirStr = STRING[67];

NameStr = STRING[8];

ExtStr = STRING[4];

Процедуры FSplit, FExpand можно использовать совместно с функцией FSearch. Функция FExpand выполняет действия, противоположные процедуре FSplit. FЕxpand дополняет имя файла до полного имени. Синтаксис функции следующий:

FExpand (Path: PathStr): PathStr;

Указанное в параметре Path имя файла функция дополнит значением пути. Пусть, например, программа, использующая данную функцию, находится в каталоге С:\TURBO\BIN\WORKS\, а в параметре Path указано ‘TEST.PAS’.

S:= FЕxpand(‘TEST.PAS’);

В этом случае функция вернет строку:

‘С:\TURBO\BIN\WORKS\TEST.PAS’

Она вернет такую строку даже в том случае, если файла TEST.PAS вообще не существует. К тому же функция FЕxpand имеет одну особенность: если в параметре Path указать ‘..\TEST.PAS’, то результатом будет строка:

‘С:\TURBO\BIN\TEST.PAS’

т.е. будет пропущена часть пути. А если в параметре указать ‘\TEST.PAS’, то результат получится следующий:

‘С\TEST.PAS’

Таким образом, функция FЕxpand в результате своей работы возвращает строку, в которой содержится путь к текущему каталогу и имя файла, заданного в параметре Path.

ЗАДАНИЯ

1. Написать программу на языке Паскаль для поиска группы файлов по указанной маске - например, с произвольным расширением в определенном каталоге (задается с клавиатуры). У найденных файлов вывести следующие сведения:

· имя файла,

· расширение файла,

· дата и время создания,

· размер в байтах.

2. Написать программу на языке Паскаль для поиска произвольного файла в указанном списке каталогов. Вывести информацию о найденном файле двумя способами:

· указать путь и имя полностью;

· указать путь и имя отдельно.

 

Лабораторная работа № 4

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...