Практика программирования (Бейсик, Си, Паскаль)



         

Задачи, советы и ответы - часть 8


Вообще говоря, упакованные данные можно было бы извлечь и другим способом — логически умножить упакованную величину на константу, содержащую сплошные единицы в соответствующем поле, и сдвинуть полученный результат на нужное число разрядов вправо.

Совет 4 (Паскаль)

Для извлечения файлов из текущего или указанного каталога можно воспользоваться процедурами FindFirst(path, .attr, sr) И FindNext(sr), вклю

ченными в состав модуля DOS. Аргумент path задает маску отбора файлов (например, "*.pas"), расширенную спецификацию маски (например, "с: \tp\source\* .раs") или просто путь (например, "c:\tp"). Второй аргумент определяет атрибут, которым должен быть снабжен отбираемый набор данных, и может принимать логическую сумму из следующих значений, задаваемых в Паскале мнемоническими константами:

  • Readonly - отбирать файлы с признаком "Только для чтения";

  • Hidden - отбирать файлы с признаком "Скрытый";

  • SysFile - отбирать системные файлы;

  • VolumeID - отбирать наборы с меткой "Идентификатор тома";

  • Directory - отбирать каталоги;

  • Archive - отбирать файлы с признаком "Архивировать";

  • AnyFile - брать любые файлы.

    Аргумент sr представляет собой запись типа searchRec, на поля которой заносятся атрибуты найденного набора. Этот тип описан в модуле DOS и имеет следующую структуру:

    type

    SearchRec=record

    Fill:array [1..21] of byte;

    Attr:byte; {атрибут набора данных}

    Time:longint; {упакованные дата и время создания}

    Size:longint; {длина набора в байтах}

    Name:string[12]; (имя набора} end;

    Цикл поиска нужных наборов данных начинается с обращения к процедуре FindFirst (поиск первого объекта) и повторяется многократными обращениями к процедуре FindNext (поиск следующего объекта). Аргумент sr в обоих обращениях должен быть один и тот же. Цикл поиска продолжается до тех пор, пока системная переменная DosError принимает нулевое значение. Как только очередная попытка окажется неудачной, в DosError заносится 18.




    Содержание  Назад  Вперед