86071

ФАЙЛЫ В СРЕДЕ ПРОГРАММИРОВАНИЯ DELPHI (ЯЗЫК OBJECT PASCAL)

Курсовая

Информатика, кибернетика и программирование

Файлы идентифицируются именами. Пользователи дают файлам символьные имена, при этом учитываются ограничения ОС как на используемые символы, так и на длину имени. До недавнего времени эти границы были весьма узкими. Так в популярной файловой системе FAT длина имен ограничивается известной схемой...

Русский

2015-04-02

473 KB

4 чел.

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ РАДИОТЕХНИКИ, ЭЛЕКТРОНИКИ И АВТОМАТИКИ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)

ФАКУЛЬТЕТ ВЫЧИСЛИТЕЛЬНЫЕ МАШИНЫ И СИСТЕМЫ

КАФЕДРА “МАТЕМАТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ

ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ

КУРСОВАЯ РАБОТА ПО ДИСЦИПЛИНЕ:

ПРОГРАММИРОВАНИЕ НА ЯВУ

ТЕМА: “ФАЙЛЫ В СРЕДЕ ПРОГРАММИРОВАНИЯ DELPHI

(ЯЗЫК OBJECT PASCAL)”

СТУДЕНТОВ:           ДЖАНУМЯН П. Л.

ГОЛОВАНОВ Д. Ю.

ГРУППА: ВВ-6-00

РУКОВОДИТЕЛЬ: АНДРИАНОВА Е. Г. 

РЕЦЕНЗЕНТ: СКВОРЦОВА Л. А.

ДОПУЩЕН К ЗАЩИТЕ”_____________

ЗАВ. КАФЕДРОЙ: ТКАЧЕНКО В. М.

МОСКВА

2001 ГОД.

СОДЕРЖАНИЕ

  1.  Аннотация……………………………………………………………………...……3

2. Теоретическая часть………………………………………………………………..4

2.1. Файловая система…...……...…………………………………………………….…..4

 2.1.1. Файловая система……………………………………………………………………4

 2.1.2. Имена файлов………………………………………………………………………...4

 2.1.3. Типы файлов…………………………………………………………...………….….5

 2.1.4. Логическая организация файлов………………………………………………..…7

 2.1.5. Физическая организация и адрес файла……………………………………..….8

 2.1.6. Общая модель файловой системы……………………………………………...10

 2.1.7. Современные архитектуры файловых систем………………………...………12

2.2. Операции с файлами………………….………………………………………….…14

2.3. Типы файлов в Delphi………………………………………………………..………14

2.4. Функции и процедуры для работы с файлами……………………….....………15

 2.4.1. Основные функции и процедуры для работы с файлами…………………...15

 2.4.2. Функции и процедуры для работы с текстовыми файлами……………...….20

 2.4.3. Функции и процедуры для работы с именем файла………………………….25

 2.4.4. Функции и процедуры низкоуровневого доступа к файлам…………...….…28

3. Технический рабочий проект…………………………………………………….31

3.1. Постановка задачи…………………………………………………………..……….31

3.2. Структурно-модульная схема………………………………………………..…….31

3.3. Решение функциональных задач……………………………………………..…...31

  3.3.1. Создание файла с заданным именем и заданным текстом…………..………….....31

 3.3.1.1. База данных…………………………………………………………………...…..31

 3.3.1.2. Алгоритм решения задачи……………………………………………..……….32

 3.3.1.3. Тестовые данные………………………………………………..………………..32

  3.3.2. Открытие файла, вывод информации о нем и содержащегося текста…………....31

 3.3.2.1. База данных………………………………………………………………...……..32

 3.3.2.2. Алгоритм решения задачи………………………………….………….……….32

 3.3.2.3. Тестовые данные…………………………………………………………..……..33

   3.3.3. Переименование заданного файла в заданной директории……………………......33

 3.3.3.1. База данных…………………………………………………………………...…..33

 3.3.3.2. Алгоритм решения задачи………………………………….………….……….33

 3.3.3.3. Тестовые данные…………………………………………………………..……..33

     3.3.4. Удаление заданного файла в заданной директории …………..………………….....33

 3.3.4.1. База данных………………………………………………………………...……..33

 3.3.4.2. Алгоритм решения задачи…………………………………...…………...…….33

 3.3.4.3. Тестовые данные………………………………………………..………………..34

   3.3.5. Копирование заданного файла из исходной директории в указанную…………….34

 3.3.5.1. База данных…………………………………………………………………….....34

 3.3.5.2. Алгоритм решения задачи…………………………………...……………...….34

 3.3.5.3. Тестовые данные…………………………………………………………..……..34

   3.3.6. Поиск файла по заданному имени ……………………………..………………….…....35

 3.3.6.1. База данных………………………………………………………………...……..35

 3.3.6.2. Алгоритм решения задачи…………………………………...…………...…….35

 3.3.6.3. Тестовые данные………………………………………………..………………..35

   3.3.7. Поиск файла по заданным атрибутам……………………...……..………………….....35

 3.3.7.1. База данных…………………………………………………………………...…..35

 3.3.7.2. Алгоритм решения задачи…………………………………...…………...…….35

 3.3.7.3. Тестовые данные………………………………………………..………………..35

4. Экспериментальная часть…………………………………………………..……36

4.1. Руководство оператора……………………………………………………….…….36

     4.1.1.1. Меню Файл……………………………………………………...………….…..36

     4.1.1.2. Меню Правка…………………………………………………………………..39

 4.1.2. Главное окно программного комплекса…………………………………………41

 4.1.3. Перечень возникающих сообщений…………………………………..…………42

4.2. Контрольный пример………………………………………………………

5. Листинг программы………………………………………………………………..43

 5.1. Unit 1……………………………………………………………………………………43

5.2. Unit 2……………………………………………………………………………………45

5.3. Unit 3……………………………………………………………………...…………….48

5.4. Unit 4……………………………………………………………………………..……..50

 

Тема данной курсовой работы - файлы в среде программирования Delphi (язык Object Pascal). Теоретическая часть содержит справочную информация относительно функций и процедур работы с файлами. Программный  комплекс выполнен в виде файловой оболочки, в которой представлены все основные операции работы с файлами:

  •  создание файла, содержащего текст пользователя (включает в себя создание указанной директории)
  •  удаление файла
  •  переименование файла
  •  просмотр и редактирование файла
  •  копирование/перенос файла из исходной директории в данную
  •  изменение атрибутов файла
  •  вывод информации о файле (атрибуты, время создания, размер, расположение на носителе)
  •  поиск файла по имени и атрибутам

2. Теоретическая часть

Под файлом подразумевается поименованная область памяти на каком-либо физическом носителе, предназначенная для хранения информации.

2.1 Файловая система

2.1.1 Файловая система - это часть операционной системы, назначение которой состоит в том, чтобы обеспечить пользователю удобный интерфейс при работе с данными, хранящимися на диске, и обеспечить совместное использование файлов несколькими пользователями и процессами.

В широком смысле понятие "файловая система" включает:

совокупность всех файлов на диске,

наборы структур данных, используемых для управления файлами, такие, например, как каталоги файлов, дескрипторы файлов, таблицы распределения свободного и занятого пространства на диске,

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

2.1.2. Имена файлов

Файлы идентифицируются именами. Пользователи дают файлам символьные имена, при этом учитываются ограничения ОС как на используемые символы, так и на длину имени. До недавнего времени эти границы были весьма узкими. Так в популярной файловой системе FAT длина имен ограничивается известной схемой 8.3 (8 символов - собственно имя, 3 символа - расширение имени), а в ОС UNIX System V имя не может содержать более 14 символов. Однако пользователю гораздо удобнее работать с длинными именами, поскольку они позволяют дать файлу действительно мнемоническое название, по которому даже через достаточно большой промежуток времени можно будет вспомнить, что содержит этот файл. Поэтому современные файловые системы, как правило, поддерживают длинные символьные имена файлов. Например, Windows NT в своей новой файловой системе NTFS устанавливает, что имя файла может содержать до 255 символов, не считая завершающего нулевого символа.

При переходе к длинным именам возникает проблема совместимости с ранее созданными приложениями, использующими короткие имена. Чтобы приложения могли обращаться к файлам в соответствии с принятыми ранее соглашениями, файловая система должна уметь предоставлять эквивалентные короткие имена (псевдонимы) файлам, имеющим длинные имена. Таким образом, одной из важных задач становится проблема генерирование соответствующих коротких имен.

Обычно разные файлы могут иметь одинаковые символьные имена. В этом случае файл однозначно идентифицируется так называемым составным именем, представляющем собой последовательность символьных имен каталогов. В некоторых системах одному и тому же файлу не может быть дано несколько разных имен, а в других такое ограничение отсутствует. В последнем случае операционная система присваивает файлу дополнительно уникальное имя, так, чтобы можно было установить взаимнооднозначное соответствие между файлом и его уникальным именем. Уникальное имя представляет собой числовой идентификатор и используется программами операционной системы. Примером такого уникального имени файла является номер индексного дескриптора в системе UNIX.

2.1.3 Типы файлов

Файлы бывают разных типов: обычные файлы, специальные файлы, файлы-каталоги.

Обычные файлы в свою очередь подразделяются на текстовые и двоичные. Текстовые файлы состоят из строк символов, представленных в ASCII-коде. Это могут быть документы, исходные тексты программ и т.п. Текстовые файлы можно прочитать на экране и распечатать на принтере. Двоичные файлы не используют ASCII-коды, они часто имеют сложную внутреннюю структуру, например, объектный код программы или архивный файл. Все операционные системы должны уметь распознавать хотя бы один тип файлов - их собственные исполняемые файлы.

Специальные файлы - это файлы, ассоциированные с устройствами ввода-вывода, которые позволяют пользователю выполнять операции ввода-вывода, используя обычные команды записи в файл или чтения из файла. Эти команды обрабатываются вначале программами файловой системы, а затем на некотором этапе выполнения запроса преобразуются ОС в команды управления соответствующим устройством. Специальные файлы, так же как и устройства ввода-вывода, делятся на блок-ориентированные и байт-ориентированные.

Каталог - это, с одной стороны, группа файлов, объединенных пользователем исходя из некоторых соображений (например, файлы, содержащие программы игр, или файлы, составляющие один программный пакет), а с другой стороны - это файл, содержащий системную информацию о группе файлов, его составляющих. В каталоге содержится список файлов, входящих в него, и устанавливается соответствие между файлами и их характеристиками (атрибутами).

В разных файловых системах могут использоваться в качестве атрибутов разные характеристики, например:

информация о разрешенном доступе,

пароль для доступа к файлу,

владелец файла,

создатель файла,

признак "только для чтения",

признак "скрытый файл",

признак "системный файл",

признак "архивный файл",

признак "двоичный/символьный",

признак "временный" (удалить после завершения процесса),

признак блокировки,

длина записи,

указатель на ключевое поле в записи,

длина ключа,

времена создания, последнего доступа и последнего изменения,

текущий размер файла,

максимальный размер файла.

Каталоги могут непосредственно содержать значения характеристик файлов, как это сделано в файловой системе MS-DOS, или ссылаться на таблицы, содержащие эти характеристики, как это реализовано в ОС UNIX (рисунок 1). Каталоги могут образовывать иерархическую структуру за счет того, что каталог более низкого уровня может входить в каталог более высокого уровня (рисунок 2).

рис. 1

Структура каталогов: а - структура записи каталога MS-DOS (32 байта);
б - структура записи каталога ОС UNIX

Иерархия каталогов может быть деревом или сетью. Каталоги образуют дерево, если файлу разрешено входить только в один каталог, и сеть - если файл может входить сразу в несколько каталогов. В MS-DOS каталоги образуют древовидную структуру, а в UNIX'е - сетевую. Как и любой другой файл, каталог имеет символьное имя и однозначно идентифицируется составным именем, содержащим цепочку символьных имен всех каталогов, через которые проходит путь от корня до данного каталога.

рис. 2

Логическая организация файловой системы
а - одноуровневая; б - иерархическая (дерево); в - иерархическая (сеть)

2.1.4. Логическая организация файла

Программист имеет дело с логической организацией файла, представляя файл в виде определенным образом организованных логических записей. Логическая запись - это наименьший элемент данных, которым может оперировать программист при обмене с внешним устройством. Даже если физический обмен с устройством осуществляется большими единицами, операционная система обеспечивает программисту доступ к отдельной логической записи. На рисунке 3 показаны несколько схем логической организации файла. Записи могут быть фиксированной длины или переменной длины. Записи могут быть расположены в файле последовательно (последовательная организация) или в более сложном порядке, с использованием так называемых индексных таблиц, позволяющих обеспечить быстрый доступ к отдельной логической записи (индексно-последовательная организация). Для идентификации записи может быть использовано специальное поле записи, называемое ключом. В файловых системах ОС UNIX и MS-DOS файл имеет простейшую логическую структуру - последовательность однобайтовых записей.

рис. 3

Способы логической организации файлов

2.1.5. Физическая организация и адрес файла

Физическая организация файла описывает правила расположения файла на устройстве внешней памяти, в частности на диске. Файл состоит из физических записей - блоков. Блок - наименьшая единица данных, которой внешнее устройство обменивается с оперативной памятью. Непрерывное размещение - простейший вариант физической организации (рисунок 4,а), при котором файлу предоставляется последовательность блоков диска, образующих единый сплошной участок дисковой памяти. Для задания адреса файла в этом случае достаточно указать только номер начального блока. Другое достоинство этого метода - простота. Но имеются и два существенных недостатка. Во-первых, во время создания файла заранее не известна его длина, а значит не известно, сколько памяти надо зарезервировать для этого файла, во-вторых, при таком порядке размещения неизбежно возникает фрагментация, и пространство на диске используется не эффективно, так как отдельные участки маленького размера (минимально 1 блок) могут остаться не используемыми.

Следующий способ физической организации - размещение в виде связанного списка блоков дисковой памяти (рисунок 4,б ). При таком способе в начале каждого блока содержится указатель на следующий блок. В этом случае адрес файла также может быть задан одним числом - номером первого блока. В отличие от предыдущего способа, каждый блок может быть присоединен в цепочку какого-либо файла, следовательно, фрагментация отсутствует. Файл может изменяться во время своего существования, наращивая число блоков. Недостатком является сложность реализации доступа к произвольно заданному месту файла: для того, чтобы прочитать пятый по порядку блок файла, необходимо последовательно прочитать четыре первых блока, прослеживая цепочку номеров блоков. Кроме того, при этом способе количество данных файла, содержащихся в одном блоке, не равно степени двойки (одно слово израсходовано на номер следующего блока), а многие программы читают данные блоками, размер которых равен степени двойки

рис. 4

Физическая организация файла
а - непрерывное размещение; б - связанный список блоков;
в - связанный список индексов; г - перечень номеров блоков

Популярным способом, используемым, например, в файловой системе FAT операционной системы MS-DOS, является использование связанного списка индексов. С каждым блоком связывается некоторый элемент - индекс. Индексы располагаются в отдельной области диска (в MS-DOS это таблица FAT). Если некоторый блок распределен некоторому файлу, то индекс этого блока содержит номер следующего блока данного файла. При такой физической организации сохраняются все достоинства предыдущего способа, но снимаются оба отмеченных недостатка: во-первых, для доступа к произвольному месту файла достаточно прочитать только блок индексов, отсчитать нужное количество блоков файла по цепочке и определить номер нужного блока, и, во-вторых, данные файла занимают блок целиком, а значит, имеют объем, равный степени двойки.

В заключение рассмотрим задание физического расположения файла путем простого перечисления номеров блоков, занимаемых этим файлом. ОС UNIX использует вариант данного способа, позволяющий обеспечить фиксированную длину адреса, независимо от размера файла. Для хранения адреса файла выделено 13 полей. Если размер файла меньше или равен 10 блокам, то номера этих блоков непосредственно перечислены в первых десяти полях адреса. Если размер файла больше 10 блоков, то следующее 11-е поле содержит адрес блока, в котором могут быть расположены еще 128 номеров следующих блоков файла. Если файл больше, чем 10+128 блоков, то используется 12-е поле, в котором находится номер блока, содержащего 128 номеров блоков, которые содержат по 128 номеров блоков данного файла. И, наконец, если файл больше 10+128+128(128, то используется последнее 13-е поле для тройной косвенной адресации, что позволяет задать адрес файла, имеющего размер максимум 10+ 128 + 128(128 + 128(128(128.

2.1.6. Общая модель файловой системы

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

рис. 5

Общая модель файловой системы

Задачей символьного уровня является определение по символьному имени файла его уникального имени. В файловых системах, в которых каждый файл может иметь только одно символьное имя (например, MS-DOS), этот уровень отсутствует, так как символьное имя, присвоенное файлу пользователем, является одновременно уникальным и может быть использовано операционной системой. В других файловых системах, в которых один и тот же файл может иметь несколько символьных имен, на данном уровне просматривается цепочка каталогов для определения уникального имени файла. В файловой системе UNIX, например, уникальным именем является номер индексного дескриптора файла (i-node).

На следующем, базовом уровне по уникальному имени файла определяются его характеристики: права доступа, адрес, размер и другие. Как уже было сказано, характеристики файла могут входить в состав каталога или храниться в отдельных таблицах. При открытии файла его характеристики перемещаются с диска в оперативную память, чтобы уменьшить среднее время доступа к файлу. В некоторых файловых системах (например, HPFS) при открытии файла вместе с его характеристиками в оперативную память перемещаются несколько первых блоков файла, содержащих данные.

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

На логическом уровне определяются координаты запрашиваемой логической записи в файле, то есть требуется определить, на каком расстоянии (в байтах) от начала файла находится требуемая логическая запись. При этом абстрагируются от физического расположения файла, он представляется в виде непрерывной последовательности байт. Алгоритм работы данного уровня зависит от логической организации файла. Например, если файл организован как последовательность логических записей фиксированной длины l, то n-ая логическая запись имеет смещение l(n-1) байт. Для определения координат логической записи в файле с индексно-последовательной организацией выполняется чтение таблицы индексов (ключей), в которой непосредственно указывается адрес логической записи.

рис. 6

Функции физического уровня файловой системы

Исходные данные:
V - размер блока
N - номер первого блока файла
S - смещение логической записи в файле

Требуется определить на физическом уровне:

n - номер блока, содержащего требуемую логическую запись

s - смещение логической записи в пределах блока

n = N + [S/V], где [S/V] - целая часть числа S/V
s = R [S/V] - дробная часть числа S/V

На физическом уровне файловая система определяет номер физического блока, который содержит требуемую логическую запись, и смещение логической записи в физическом блоке. Для решения этой задачи используются результаты работы логического уровня - смещение логической записи в файле, адрес файла на внешнем устройстве, а также сведения о физической организации файла, включая размер блока. Рисунок 6 иллюстрирует работу физического уровня для простейшей физической организации файла в виде непрерывной последовательности блоков. Подчеркнем, что задача физического уровня решается независимо от того, как был логически организован файл.

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

2.1.7. Современные архитектуры файловых систем

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

Новая файловая система имеет многоуровневую структуру (рисунок 7), на верхнем уровне которой располагается так называемый переключатель файловых систем (в Windows 95, например, такой переключатель называется устанавливаемым диспетчером файловой системы - installable filesystem manager, IFS). Он обеспечивает интерфейс между запросами приложения и конкретной файловой системой, к которой обращается это приложение. Переключатель файловых систем преобразует запросы в формат, воспринимаемый следующим уровнем - уровнем файловых систем.

рис. 7

Архитектура современной файловой системы

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

Для выполнения своих функций драйверы файловых систем обращаются к подсистеме ввода-вывода, образующей следующий слой файловой системы новой архитектуры. Подсистема ввода вывода - это составная часть файловой системы, которая отвечает за загрузку, инициализацию и управление всеми модулями низших уровней файловой системы. Обычно эти модули представляют собой драйверы портов, которые непосредственно занимаются работой с аппаратными средствами. Кроме этого подсистема ввода-вывода обеспечивает некоторый сервис драйверам файловой системы, что позволяет им осуществлять запросы к конкретным устройствам. Подсистема ввода-вывода должна постоянно присутствовать в памяти и организовывать совместную работу иерархии драйверов устройств. В эту иерархию могут входить драйверы устройств определенного типа (драйверы жестких дисков или накопителей на лентах), драйверы, поддерживаемые поставщиками (такие драйверы перехватывают запросы к блочным устройствам и могут частично изменить поведение существующего драйвера этого устройства, например, зашифровать данные), драйверы портов, которые управляют конкретными адаптерами.

Большое число уровней архитектуры файловой системы обеспечивает авторам драйверов устройств большую гибкость - драйвер может получить управление на любом этапе выполнения запроса - от вызова приложением функции, которая занимается работой с файлами, до того момента, когда работающий на самом низком уровне драйвер устройства начинает просматривать регистры контроллера. Многоуровневый механизм работы файловой системы реализован посредством цепочек вызова.

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

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

2.2. Операции с файлами

Стандартных операций с файлами в операционных системах (DOS, Windows) не так много. Ограничимся их перечислением:

  •  открытие
  •  закрытие
  •  чтение
  •  запись
  •  создание
  •  удаление
  •  смена атрибутов

2.3. Типы файлов в Delphi

Различают файлы трех видов: текстовые файлы, типизированные файлы и не типизированные файлы.

Текстовые файлы состоят из последовательностей символов, разбитых на строки. В Object Pascal предопределен тип TextFile, соответствующий текстовому файлу. Таким образом, объявление файловой переменной может иметь вид:

var <имя файловой переменной>: TextFile;

Работа с текстовыми фалами осуществляется процедурами и функциями файлового ввода/вывода. Основные процедуры чтения - Read, Readln, Write и Writeln.

Типизированные файлы являются двоичными файлами, содержащими последовательность однотипных данных. Объявление файловых переменных таких файлов имеет вид:

var <имя файловой переменной>: file of <тип данных>;

Например:

var F: file of real;

Процедуры чтения и записи Read и Write не отличаются от соответствующих процедур для текстовых файлов. Процедур, аналогичных Readln и Writeln, для типизированных файлов нет. Зато есть процедура Seek, позволяющая перемещаться по файлу не только последовательно, как в текстовых файлах, но сразу переходить к требуемому элементу. Имеется также функция FilePos, которая возвращает текущую позицию в файле.

Не типизированные файлы - это двоичные файлы, которые могут содержать самые различные данные в виде последовательности байтов. Программист при чтении этих данных сам должен разбираться, какие байты к чему относятся.

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

var <имя файловой переменной>: file;

Открытие не типизированных фалов осуществляется процедурами Reset и Rewrite, синтаксис которых несколько отличен от аналогичных процедур для других видов файлов тем, что в этих процедурах указывается размер одной записи в байтах. Вместо процедур записи и чтения Read и Write в не типизированных файлах имеются процедуры BlockRead и BlockWrite, которые читают или записывают указанное в них число записей.

2.4. Функции и процедуры для работы с файлами

  1.  .1. Основные функции и процедуры для работы с файлами.

AssignFile

Устанавливает ассоциативную связь между файловой переменной и внешним файлом

BlockRead

Читает несколько записей из файла в переменную

BlockWrite

Записывает несколько записей в файл

CloseFile

Разрывает ассоциативную связь между файловой переменной и файлом

DeleteFile

Удаляет файл с диска

DiskFree

Определяет количество свободного места на диске

DiskSize

Определяет размер указанного диска

Eof

Определяет, стоит ли указатель в конце файла

Erase

Удаляет файл, связанный с файловой переменной

DiskSize

Определяет размер указанного диска

FileExists

Проверяет, существует ли указанный файл.

FileGetAttr

Возвращает атрибуты указанного файла.

FilePos

Возвращает текущую позицию файлового указателя

FileSearch

Производит поиск файла в нескольких заданных каталогах

FileSetAttr

Устанавливает атрибуты файла

FileSize

Возвращает размер файла в байтах, а для файлов типа Record - количество записей

FindClose

Высвобождает память, выделенную процедурой FindFirst

FindFirst

Находит файл с заданным набором атрибутов по заданной маске в указанном каталоге

FindNext

Производит повторный поиск файла

IOResult

Возвращает статус ошибки последней выполненной операции ввода/вывода

Read

Читает данные из файла

Rename

Переименовывает файл

RenameFile

Переименовывает файл

Reset

Открывает существующий файл.

Rewrite

Создает новый файл и открывает его

Seek

Устанавливает файловый указатель в заданную позицию.

Truncate

Удаляет все записи в файле, находящиеся после текущей позиции

Write

Записывает данные в файл

1) Процедура AssignFile (var Vf; FileName: string);

Модуль: System

Описание

Процедура устанавливает ассоциативную связь между файловой переменной Vf и внешним файлом, имя которого определено параметром FileName. Все операции, производимые с файловой переменной, будут производиться со связанным с ней файлом. FileName - выражение типа string или PChar (если допускается расширенный синтаксис). Если в качестве имени файла указать пустую строку, то файловая переменная будет ассоциирована со стандартным файлом ввода (когда после AssignFile следует процедура Reset) или вывода (когда после AssignFile следует процедура Rewrite).

2) Процедура BlockRead( var Vf : file; var Buf; Count: Integer [; var AmtTransferred: Integer] );

Модуль: System

Описание

Процедура читает одну или большее количество записей из открытого файла, связанного с файловой переменной Vf, в переменную Buf. Параметр Count определяет количество записей, которое необходимо прочитать из файла. В параметре AmtTransferred возвращается фактическое количество прочитанных записей, которое может быть меньше Count (например, когда размер последнего блока данных в файле меньше заданного размера записи). Максимальный размер прочитанного блока равен Count*RecSize байт. RecSize - размер записи, определенный, во время открытия файла (если размер записи не был задан, то используется значение по умолчанию - 128 байт). Параметр AmtTransferred является необязательным. Но если данный параметр опущен, а количество прочитанных записей меньше Count, то возникнет ошибка ввода/вывода (исключение EInOutError).

3) Процедура BlockWrite( var Vf : file; var Buf; Count: Integer [; var AmtTransferred: Integer] ); 

Модуль: System

Описание

Процедура записывает одну или несколько записей из переменной Buf во внешний файл, cвязанный с файловой переменной Vf. Параметр Count определяет количество записей, которое yеобходимо записать в файл. В параметре AmtTransferred возвращается фактическое количество

скопированных записей, которое может быть меньше Count (например, когда место на диске закончилось до окончания записи в файл). Максимальный размер записываемого блока равен Count*RecSize байт, где RecSize - размер записи, определенный, во время открытия файла или 128 байт, если размер записи не был определен. Параметр AmtTransferred является необязательным. Но если данный параметр опущен, и количество прочитанных записей будет меньше Count, то возникнет ошибка ввода/вывода (исключение EinOutError).

4) Процедура CloseFile( var Vf );

Модуль: System

Описание

Процедура разрывает ассоциативную связь между файловой переменной и внешним файлом, при этом, файл обновляется и закрывается. Механизм обработки ошибок ввода/вывода с помощью обработчиков исключений включается директивой компилятора {$I+}. При использовании директивы {$I-} информацию об ошибках можно получить с помощью функции IOResult.

5) Функция Eof( var Vf ): Boolean;

Модуль: System

Описание

Функция определяет, стоит ли указатель текущей позиции в конце файла Vf (Vf - файловая переменная). Если указатель стоит на последнем символе файла, или файл не содержит данных, то функция возвращает True, а иначе - False .

6) Функция FilePos( var Vf ): LongInt;

Модуль: System

Описание

Функция возвращает текущую позицию указателя в файле (файл должен быть предварительно открыт). Параметр Vf представляет собой файловую переменную, ассоциированную с файлом. Данная функция не может быть применена к текстовым файлам.

7) Функция IOResult: Integer;

Модуль: System

Описание

Функция возвращает статус ошибки последней выполненной операции ввода/вывода. Использование данной функции возможно только при отключенной проверке ошибок директивой компилятора {$I-}. При возникновении ошибки ввода/вывода, все последующие операции ввода/вывода будут игнорироваться до тех пор, пока не будет сделано обращение к функции IOResult. Вызов IOResult очищает внутренний флаг ошибки. Альтернативным способом обработки ошибок ввода/вывода является использование механизма обработки исключительных ситуаций, который включается директивой компилятора {$I+}.

8) Процедура Read( Vf, V1 [, V2, ..., Vn ] );

Модуль: System

Описание

Процедура читает информацию из файла, ассоциированного с файловой переменной Vf, в переменную(ые) Vn.

Типизированные файлы

Читает запись (компонент) из файла в переменную.

Файлы строкового типа

Читает все символы до маркера конца строки, не включая его или пока значение Eof(Vf) не будет равно True. Если размер прочитанной строки больше, чем размер строковой переменной, то строка усекается. После прочтения строки, каждый последующий вызов данной процедуры будет возвращать пустую строку, т.к. процедура Read не переводит указатель на новую строку. Если необходимо прочитать более одной записи из файла, то используйте процедуру Readln.

Файлы символьного типа

Читает символ из файла. Если достигнут конец файла (т.е. Eof(Vf)=True), то

процедура возвращает символ 'Ctrl+Z' (ASCII код 26).

Файлы целочисленных и действительных типов

Если тип переменной соответствует формату числовой строки, то переменной присваивается прочитанное значение, иначе возникает ошибка ввода/вывода.

Текстовые файлы

См. описание процедуры Read для текстовых файлов.

9) Процедура Reset( var Vf [: File; RecSize: Word ] );

Модуль: System

Описание

Процедура открывает существующий файл и устанавливает указатель в начало файла. Vf - файловая переменная, ассоциированная с файлом любого типа при помощи процедуры AssignFile. RecSize - необязательный параметр, указывающий размер записи файла. Когда параметр RecSize опущен, размер записи принимается по умолчанию 128 байт. Если файл, связанный с файловой переменной Vf, не существует, то при вызове процедуры Reset возникнет

ошибка. Если файл уже открыт, то при вызове данной процедуры он сначала закрывается, а затем снова открывается. Если с файловой переменной Vf связан текстовый файл, то он открывается только для чтения.

10) Процедура Rewrite( var Vf: File [; Recsize: Word ] );

Модуль: System

Описание

Процедура создает новый файл и открывает его. Параметр Vf определяет файловую переменную, связанную с любым типом файлов при помощи процедуры AssignFile. RecSize - необязательный параметр, указывающий размер записи файла. Когда параметр RecSize опущен, размер записи принимается по умолчанию 128 байт. Если файл с заданным именем уже существует, то процедура удаляет старый файл и создает новый пустой файл. Если файл существует и открыт, то функция перед удалением старого файла сначала закрывает его. Если файловая переменная Vf связана с текстовым файлом, то он открывается только для записи. После вызова данной процедуры Eof(Vf)=True.

11) Процедура Seek( var Vf; N: Longint );

Модуль: System

Описание

Устанавливает файловый указатель в заданную позицию файла. Параметр Vf представляет собой файловую переменную, ассоциированную с типизированным или нетипизированным файлом. Для успешного выполнения процедуры файл должен быть открыт. Индекс позиции, в которую будет установлен указатель, определяется параметром N. Первая позиция в файле имеет индекс 0. Если необходимо добавить данные в конец файла, то поставить указатель в конец файла Vf можно следующим образом:

Seek(Vf, FileSize(Vf));.

12) Процедура Truncate( var Vf );

Модуль: System

Описание

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

13) Процедура Write( Vf, V1,...,Vn ); (для типизированных файлов)

Модуль: System

Описание

Процедура записывает данные в типизированный файл. Параметр Vf представляет собой файловую переменную, связанную с типизированным файлом. Тип переменных V1 ... Vn должен соответствовать типу фала. При записи в файл очередного компонента, указатель текущей позиции файла передвигается на следующий компонент. Если перед вызовом данной процедуры указатель стоит в конце файла (Eof(Vf)=True), то записываемые данные будут добавлены в конец файла (размер файла соответственно увеличится).

См. также описание процедуры Write для тектовых файлов.

  1.  Функции и процедуры для работы с текстовыми файлами

Append

Открывает файл в режиме "только запись" и устанавливает указатель в конец файла.

AssignPrn

Связывает файловую переменную с принтером

Eof

Определяет, стоит ли указатель в конце файла.

Eoln

Определяет, стоит ли указатель в конце строки текстового файла

Flush

Очищает буфер текстового файла

Read

Читает одно или больше значений из текстового файла в соответствующее количество переменных.

Readln

Читает строку текста из файла и переводит указатель на следующую строку.

SeekEof

Определяет, достигнут ли конец текстового файла

SeekEoln

Определяет, достигнут ли конец строки.

SetTextBuf

Устанавливает буфер ввода-вывода для текстового файла

Write

Записывает одно или больше значений в текстовый файл

Writeln

Записывает одно или больше значений с маркером конца строки в текстовый файл

1) Процедура Append( var Vf: Text );

Модуль: System

Описание

Процедура открывает внешний файл с доступом только для записи и устанавливает указатель в конец файла. Vf - файловая переменная, ассоциированная с файлом при помощи процедуры AssignFile. Если файл Vf уже открыт, то при вызове процедуры Append он закрывается и открывается вновь. Если файл не существует, то происходит ошибка. Если в последнем 128-байтовом блоке файла присутствует символ Ctrl+'Z' (ASCII код 26), то файловый указатель устанавливается так, чтобы следующий добавляемый в файл символ был записал поверх первого Ctrl+'Z' в блоке. Таким образом, текст может быть конкатенирован к файлу, который завершается на Ctrl+'Z'.

2) Функция Eof [( var Vf )]: Boolean;

Модуль: System

Описание

Функция определяет, стоит ли файловый указатель в конце файла. Vf - файловая переменная, связанная с текстовым файлом. Eof(Vf) возвращает True, когда указатель текущей позиции стоит на последнем символе файла, или если файл не содержит данных (пустой), в противном случае возвращается False. Функция Eof для текстовых файлов аналогична функции Eof для типизированных файлов, за исключением того, что для текстовых файлов параметр Vf может быть опущен, и тогда функция будет обращаться к стандартному файлу ввода.

3) Функция Eoln[( var Vf: Text )]: Boolean;

Модуль: System

Описание

Функция определяет, стоит ли указатель в конце строки текстового файла связанного с файловой переменной Vf. Если указатель стоит в конце строки или достигнут конец файла (Eof(Vf)=True), то функция возвращает True, а иначе - False. Если параметр Vf опущен, то действие функции применяется к стандартному файлу ввода.

4) Процедура Flush( var Vf: Text);

Модуль: System

Описание

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

5) Процедура Read( [ var Vf: Text ] V1 [ V2 , ..., Vn ] );

Модуль: System

Описание

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

Запись упакованной строки:

Имеет такой же результат, как для строки, длина которой равна количеству элементов упакованной строки.

Запись значений булева типа

Имеет такой же результат, как для строк 'True' или 'False'

6) Процедура Readln( [ var Vf: Text ] V1 [ V2 , ..., Vn ] );

Модуль: System

Описание

Процедура читает строку текста из файла и переводит указатель на начало следующей строки. Вызов Readln(Vf) без параметров просто переводит указатель в начало следующей строки.

7) Функция SeekEof [ ( var Vf: Text ) ]: Boolean;

Модуль: System

Описание

Функция определяет, достигнут ли конец файла. Если указатель стоит в конце файла, то функция возвращает True, а иначе - False. Данная функция может применяться только к открытым текстовым файлам.

8) Функция SeekEoln [ ( var Vf: Text ) ]: Boolean;

Модуль: System

Описание

Функция определяет, достигнут ли конец строки. Если указатель стоит в конце строки, то функция возвращает True, а иначе - False. Данная функция может применяться только к открытым текстовым файлам.

9) Процедура SetTextBuf( var Vf: Text; var [ ; Size: Integer] );

Модуль: System

Описание

Процедура устанавливает буфер ввода/вывода для текстового файла. Каждая файловая переменная текстового файла имеет внутренний 128-байтовый буфер чтения/записи. Данный буфер не играет роли в большинстве приложений, однако, если программа жестко привязана к вводу/выводу, то наличие буфера позволяет увеличить ее эффективность за счет уменьшения обращений к диску и непроизводительных затрат системы. Процедура SetTextBuf устанавливает для текстового файла, связанного с файловой переменной Vf, взамен внутреннего 128-байтового буфера, буфер указанный в параметре Buf, размером Size байт. Если переменная Size опущена, то размер принимается равным SizeOf( Buf ). Новый заданный буфер будет ассоциирован с файлом Vf до вызова функции AssignFile для данного файла. Процедура SetTextBuf вызывается сразу после вызова процедур Reset, Rewrite или Append. Если до вызова SetTextBuf над файлом производились операции ввода/вывода, то из-за смены буфера информация может быть потеряна.

10) Процедура Write( [var Vf: Text;] P1 [, P2 , ..., Pn ] );

Модуль: System

Описание

Процедура записывает одно или больше значений в текстовый файл, связанный с файловой переменной Vf. Файл, в который записываются данные, должен быть открыт для записи. Если параметр Vf опущен, то действие процедуры применяется к стандартному Файлу вывода. В параметрах P, указывается значение, которое должно быть записано в файл.Значения параметров Pn должны иметь один из следующих типов:

· Char;

· целочисленный тип (Byte, ShortInt, Word, LongInt, Cardinal);

· значение с плавающей запятой (Single, Real, Double, Extended, Currency);

· строковый тип (PChar, AnsiString, ShortString);

· тип упакованной строки;

· булевый тип (Boolean, Bool).

Записываемый параметр должен иметь форму:

OutExpr[:MinWidth [:DecPlaces]], гдеOutExpr - выводимое выражение, MinWidth, DecPlaces - параметры форматирования. Параметр MinWidth: Integer определяет минимальную ширину поля (должна быть >0). Параметр DecPlaces: Integer определяет количество десятичных позиций после запятой (для фиксированного вывода чисел с плавающей запятой). Данный параметр должен указываться только для значений действительных типов, и только тогда, когда определен параметр MinWidth. Значение DecPlaces должно быть больше или равно 0.

Запись значений символьного типа

Если опущен параметр MinWidth, то в файл записывается указанный символ, иначе необходимая длина поля достигается записью дополнительных пробелов.

Запись значений целочисленного типа

Если опущен параметр MinWidth, то в файл записывается значение один к одному, иначе недостающее количество позиций заполняется пробелами.

Запись значения действительного типа

Формат записи зависит от наличия параметра DecPlaces. Параметр MinWidth определяет суммарное количество символов. Если параметр MinWidth опущен, то принимается значение по умолчанию (17 символов). Если MinWidth<8, то значение этого параметра принимается равным 8. Параметр DecPlaces показывает, сколько символов должно быть записано после десятичного разделителя. Если DecPlaces>11, то принимается значение по умолчанию равное 11. Если параметр DecPlaces опущен или имеет отрицательное значение, то записывается десятичная строка с плавающей запятой в экспонентальном виде:

[ /-]<цифра>.<десятичная часть>E[+/-]<экспонента>

Если значение DecPlaces присутствует, а значение указанное в параметре MinWidth превышает количество выводимых символов, то недостающее количество заполняется пробелами перед числом.

Пример

-12.3456789:1 = -1.2E+0000

-12.3456789:8 = -1.2E+0000

-12.3456789:12 = -1.234E+0001

-12.3456789:22 = -1.2345678900000E+0001

-12.3456789:3:1 = -12.3

-12.3456789:3:5 = -12.34567

-12.3456789:15:5 = -12.34567

Запись значений строкового типа

Если параметр MinWidth опущен, то строка записывается один к одному. Если

данный параметр присутствует и длина строки меньше значения MinWidth, то

необходимая длина достигается записью пробелов в начале строки.

11) Процедура Writeln( [var Vf: Text;] P1 [, P2 , ..., Pn ] );

Модуль: System

Описание

Действие данной процедуры аналогично процедуре Write для текстовых файлов, но, в отличие от нее, процедура Writeln добавляет к записываемому тексту маркер конца строки. Если при вызове Writeln параметры Pn опущены, то процедура просто записывает в файл маркер конца строки.

2.4.3 Функции и процедуры для работы с именем файла

ChangeFileExt

Возвращает имя файла с новым заданным расширением.

ExcludeTrailingBackslash

= Только в Delphi 5 =

Удаляет в конце строки (пути к файлу) символ наклонной влево черты '\'.

ExpandFileName

Возвращает полное имя файла, добавляя указанное имя файла к имени текущего каталога.

ExpandUNCFileName

Возвращает полное имя файла на сетевом диске.

ExtractFileDir

Извлекает из полного имени файла полное имя каталога, в котором находится файл.

ExtractFileDrive

Извлекает из полного имени файла имя диска.

ExtractFileExt

Возвращает расширение файла.

ExtractFileName

Извлекает имя файла из полного имени файла

ExtractFilePath

Извлекает из полного имени файла имя диска и каталогов (путь к файлу).

ExtractRelativePath

Преобразовывает полный путь в относительный.

ExtractShortPathName

Конвертирует длинное имя файла в формат DOS.

IncludeTrailingBackslash

= Только в Delphi 5 =

Добавляет в конец строки символ наклонной влево черты '\'.

MatchesMask

Проверяет, соответствует ли имя файла заданной маске (фильтру)

MinimizeName

= Только в Delphi 4 =

Заменяет часть имени файла многоточием, для того, чтобы уместить его в заданный размер холста.

ProcessPath

Извлекает из полного имени файла имя диска, имя каталога и имя файла.

1) Функция ExpandFileName ( const FileName: string ): string;

Модуль: SysUtils

Описание

Функция возвращает полное имя файла.

Функция добавляет к имени текущего каталога имя файла, указанное в параметре FileName. Совершенно необязательно, чтобы указанный файл существовал.

2) Функция ExtractFileDir ( const FileName: string ): string;

Модуль: SysUtils

Описание

Функция извлекает из полного имени файла FileName полное имя каталога, в котором находится указанный файл. Если полное имя файла FileName не содержит ни имя диска, ни имена каталогов, то возвращается пустая строка. Результат функции можно использовать в качестве параметра для функций:

CreateDir, RemoveDir и SetCurrentDir.

Данная функция поддерживает работу с многобайтовыми наборами символов (MBCS).

3) Функция ExtractFileDrive ( const FileName: string ): string;

Модуль: SysUtils

Описание

Функция возвращает имя диска, извлеченное из полного имени файла FileName. Если указанное имя файла не содержит имя диска, то функция возвращает пустую строку. Для имени в UNC формате возвращается строка в формате '\\<имя сервера>\<имя ресурса>'.

4) Функция ExtractFileExt ( const FileName: string ): string;

Модуль: SysUtils

Описание

Функция возвращает расширение файла, имя которого указано в параметре FileName. Результирующая строка включает в себя символ точки и символы расширения файла. Если указанное имя файла не имеет расширения, то функция возвращает пустую строку. Данная функция поддерживает работу с многобайтовыми наборами символов (MBCS).

5) Функция ExtractFileName ( const FileName: string ): string;

Модуль: SysUtils

Описание

Функция возвращает имя файла без имени диска и каталогов, извлекая его из полного имени файла FileName. Данная функция поддерживает работу с многобайтовыми наборами символов (MBCS).

6) Функция ExtractFilePath ( const FileName: string ): string;

Модуль: SysUtils

Описание

Функция возвращает путь к файлу, извлекая его из полного имени файла FileName. Данная функция аналогична функции ExtractFileDir, за исключением того, что возвращаемый путь заканчивается символом наклонной влево черты. Если имя файла FileName не содержит ни имя

каталогов, ни имя диска, то функция возвращает пустую строку. Данная функция поддерживает работу с многобайтовыми наборами символов (MBCS).

7) Функция ExtractRelativePath ( const BaseName, DestName: string ): string;

Модуль: SysUtils

Описание

Функция преобразовывает полный путь в относительный. Параметр BaseName определяет полное имя файла. Функция подсчитывает количество вложенных каталогов в параметре DestName и вставляет подстроку '..\' на место недостающих каталогов в строке BaseName. Имя диска при этом не возвращается.

8) Функция MatchesMask ( const FileName, Mask: string ): Boolean;

Модуль: Masks

Описание

Функция проверяет, соответствует ли файл FileName маске, определенной в параметре Mask. При сравнении регистр символов не учитывается. Маска может состоять из литеральных символов, множеств или групповых символов. Каждый литеральный символ должен соответствовать одиночному символу в строке. Каждое множество должно заключаться в квадратные скобки [ ]. Элементом множества может быть литеральный символ или диапазон значений. Диапазон должен иметь начальное и конечное значения. Вместо начального значения диапазона может стоять символ '-'. Множество должно соответствовать одиночному символу строки FileName. Символ соответствует множеству, если он соответствует одному из символов множества или входит в заданный диапазон (символ входит в диапазон, если он соответствует начальному или конечному значению диапазона, или находится между ними). Если во множестве после открывающей скобки стоит знак восклицания '!', то сравниваемый символ не должен соответствовать ни одному символу множества (т.е. результат сравнения положительный, если сравниваемый символ не принадлежит множеству). Групповые символы - это символ звездочки '*' и знак вопроса '?'. Звездочка означает любое количество допустимых символов, а '?'- любой одиночный символ. Функция возвращает True, если имя файла соответствует маске, и False, если не соответствует. Если указана недопустимая маска, то возникает исключение. С помощью функции MatchesMask можно проверить любую строку, а не только имя файла на соответствие заданной маске.

9) Процедура ProcessPath ( const FileName: string; var Drive: Char; var DirPart: string; var FilePart: string );

Модуль: FileCtrl

Описание

Процедура анализирует полное имя файла FaleName и возвращает отдельно имя диска Drive, каталог DirPart и имя файла FilePart. Если файл не существует, то возникает ошибка. Когда полное имя файла содержит больше одного каталога, также возникает ошибка.

  1.  Функции и процедуры низкоуровневого доступа к файлам

FileClose

Закрывает файл

FileCreate

Создает новый файл

FileGetDate

Возвращает дату и время последнего изменения файла в DOS формате.

FileOpen

Открывает файл в заданном режиме доступа

FileRead

Читает заданное количество байт из файла в буфер и

возвращает количество фактически прочитанных байт.

FileSeek

Устанавливает указатель в заданную позицию файла

FileSetDate

Устанавливает дату и время последнего изменения файла

FileWrite

Записывает заданное количество байт из буфера в файл.

1) Процедура FileClose(Handle: Integer );

Модуль: SysUtils

Описание

Функция закрывает файл, определенный дескриптором Handle.

2) Функция FileCreate( const FileName: string );

Модуль: SysUtils

Описание

Функция создает новый файл с именем, указанным в параметре FileName. Если файл удается создать, то функция возвращает дескриптор нового файла, в противном случае возвращается -1.

3) Функция FileGetDate( Handle: Integer ): Integer;

Модуль: SysUtils

Описание

Функция возвращает дату и время последнего изменения файла в DOS формате. Дескриптор файла указывается в параметре Handle. Если дескриптор задан неправильно, то функция возвращает -1. Возвращаемое значение может быть преобразовано в формат TDateTime с помощью функции FileDateToDateTime.

4) Функция FileOpen( const FileName: string; Mode: Integer ): Integer;

Модуль: SysUtils

Описание

Функция открывает файл с именем FileName в режиме доступа, определенном

параметром Mode. Значение режима доступа задается с помощью одной из

констант fmOpen и одной из констант fmShare (см. таблицу ниже). Между

указанными константами ставится оператор OR.

Если файл успешно открыт, то функция возвращает дескриптор файла, иначе

возвращается значение -1.

Константа

Значение

Описание

fmOpenRead

$0000

Только чтение

fmOpenWrite

$0001

Только запись

fmOpenReadWrite

$0002

Открытие для чтения и записи

fmShareCompat

$0000

Совместный доступ, посредством FCBs (File Control Blocks)

fmShareExclusive

$0010

Никакие другие приложения не могут открывать файл ни в каком режиме

fmShareDenyWrite

$0020

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

fmShareDenyRead

$0030

Другие приложения могут открывать файл только для чтения

fmShareDenyNone

$0040

Полный доступ для других приложений

Данная функция использует низкоуровневый доступ к файлам, поэтому, во избежание возникновения проблем, рекомендуется вместо нее использовать процедуры AssignFile-Rewrite и AssignFile-Reset

5) Функция FileRead( Handle: Integer; var Buffer; Count: Integer ): Integer;

Модуль: SysUtils

Описание

Функция читает Count байт из файла, дескриптор которого указан в параметре Handle, в буфер Buffer и возвращает количество прочитанных байт. Если значение Count превышает размер файла, то фактическое количество прочитанных байт будет меньше значения Count. Дескриптор Handle, может быть получен с помощью функций и FileCreate и FileOpen.

6) Функция FileSeek;

Модуль: SysUtils

Варианты использования:

FileSeek( Handle, Offset, Origin: Integer ): Integer;

FileSeek( Handle: Integer; const Offset: Int64; Origin: Integer ): Int64;

Описание

Функция устанавливает указатель в заданную позицию файла (файл должен быть открыт). Параметр Handle определяет дескриптор файла, полученный при создании или открытии файла с помощью функции FileCreate и FileOpen соответственно. Параметр Offset определяет смещение указателя в байтах относительно позиции указанной в параметре Origin:

Origin

Описание

0

Смещение указателя относительно начала файла

1

Смещение указателя относительно текущей позиции

2

Смещение указателя относительно конца файла

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

7) Функция FileSetDate( Handle: Integer; Age: Integer ): Integer;

Модуль: SysUtils

Описание

Функция устанавливает дату и время последнего изменения файла. В параметре Age указывается значение “дата-время” в формате DOS. Handle – дескриптор файла полученный с помощью функций FileCreate или FileOpen. В случае успешного выполнения, функция возвращает 0, иначе возвращается код ошибки Windows. Для преобразования переменной из формата TDateTime в "дата-время" формат DOS можно использовать функцию DateTimeToFileDate.

8) Функция FileWrite( Handle: Integer; const Buffer; Count: Integer ): Integer;

Модуль: SysUtils

Описание

Функция записывает Count байт из буфера Buffer в файл, дескриптор которого указан в параметре Handle. В случае успешного выполнения функция возвращает количество фактически записанных байт, которое может быть меньше значения Count (например, во время записи закончилось место на диске). В случае ошибки функция возвращает -1.

3. Технический рабочий проект

3.1 Постановка задачи

Цель данного программного комплекса - демонстрация работы с файлами в среде программирования Delphi (язык Object Pascal). Рассматриваются основные процедуры работы с файлами и приведены примеры их использования. Каждый пример представлен в виде отдельной подпрограммы, для которой описаны собственная база данных, описание алгоритма и приведены тесты.

3.2. Структурно-модульная схема

интерфейсный

модуль

(модуль 1)

               модуль 2                                        модуль 3                                         модуль 4

создать         открыть        удалить        копировать    переим./              поиск по        поиск по                  

                                                                                      перенести               имени       атрибутам

Интерфейсный модуль (модуль 1) отвечает за интерфейс основного окна программного комплекса. Модуль 2 содержит подпрограммы создания, удаления и открытия файла. Модуль 3 – переименование и копирование файла. Модуль 4 содержит подпрограмму поиска файла.

3.3. Решение функциональных задач.

3.3.1. Создание файла с заданным именем и заданным текстом в заданной директории.

3.3.1.1 База данных

имя переменной

семантика

тип

диапазон изменения

S

имя файла

string

вся доступная память

F

файловая переменная

file

3.3.1.2. Алгоритм решения задачи

Окно создания файла появляется после нажатия меню Файл  Создать. Создание файла происходит при нажатии кнопки Создать. При нажатии кнопки Создать вызывается процедура Create, в которой:

  •  заданное пользователем имя файла S связывается с файловой переменной F
  •  открывается файл F для записи
  •  закрытие файла F

Далее происходит сохранение текста из окна ввода в файле F.

3.3.1.3 Тестовые данные

исходное состояние папки

входные данные

конечное состояние папки

содержание нового файла

нет файлов

test.txt

содержимое: тестирование 1

test.txt

тестирование 1

test.txt

test2.txt

содержимое: повторное тестирование создания файла

test.txt

test2.txt

повторное тестирование создания файла

  1.  Открытие файла, вывод информации о нем и содержащегося текста.

3.3.2.1 База данных

имя переменной

семантика

тип

диапазон изменения

S

имя файла

string

вся доступная память

H

дескриптор файла

integer

-32768..32767

F

файловая переменная

file of byte

3.3.2.2. Алгоритм решения задачи

Окно открытия файла появляется после нажатия меню Файл  Открыть. Создание файла происходит при нажатии кнопки Открыть. При нажатии кнопки Открыть вызываются процедуры Inf и GetAttr, в которых:

Inf:

  •  заданное пользователем имя файла S связывается с файловой переменной F
  •  открывается файл F для открытия
  •  получает информацию о размере файла, имя файла, расположение файла
  •  получает дескриптор файла и информацию дате создания файла
  •  закрывает файл

GetAttr:

  •  получает атрибуты файла
  •  отображает атрибут(ы) файла в главном окне программного комплекса

Получает текст файла и выводит его в главном окне программного комплекса.

3.3.2.3. Тестовые данные

исходное состояние главного окна

входные данные

конечное состояние главного окна

содержание открытого файла

нет данных

test.txt

имя файла: test.txt

путь: c:\test

размер: 14 Байт

дата создания: 18.05.01 19:16:56

атрибуты: архивный

тестирование 1

  1.  Переименование заданного файла в заданной директории

Данная процедура не содержит переменных.

3.3.3.1 Алгоритм решения задачи

Окно переименования файла появляется после нажатия меню Файл  Переименовать. Переименование файла происходит при нажатии кнопки Переименовать. Процедура  RenameFile меняет имя файла на заданное пользователем.

3.3.3.2. Тестовые данные

исходное состояние папки

входные данные

конечное состояние папки

test.txt

test2.txt

test2.txt

test1.txt

test.txt

test1.txt

3.3.4. Удаление заданного файла в заданной директории

Данная процедура не содержит переменных.

3.3.4.1. Алгоритм решения задачи

Окно удаления файла появляется после нажатия меню Файл  Удалить. Удаление файла происходит при нажатии кнопки Удалить. Процедура  DeleteFile удаляет заданный пользователем файл.

3.3.4.2. Тестовые данные

исходное состояние папки

входные данные

конечное состояние папки

test.txt

test1.txt

test1.txt

test.txt

  1.  Копирование заданного файла из исходной директории в указанную.

3.3.5.1. База данных

имя переменной

семантика

тип

диапазон изманения

S1

имя файла

string

вся доступная память

S2

имя файла

string

вся доступная память

VF1

файловая переменная

file

VF2

файловая переменная

file

NRead

integer

-32768..32767

NWrite

integer

-32768..32767

Buf

array of char

1..1024

3.3.5.2. Алгоритм решения задачи

Окно удаления файла появляется после нажатия меню Правка  Копировать. Удаление файла происходит при нажатии кнопки Копировать. После нажатия кнопки Копировать запускается процедура Copy, в которой:

  •  из файла vf1 с именем S1 с помощью процедуры BlockRead считываются блоки в массив Buf до тех пор, пока процедура не достигнет конца
  •  из массива Buf с помощью процедуры BlockWrite блоки копируются в файл vf2 с именем S2

3.3.5.3. Тестовые данные

исходное состояние папки

Copy

входные данные

конечное состояние папки

test1.txt

test.txt

  1.  Поиск файла по заданному имени

3.3.6.1. База данных

имя переменной

семантика

тип

диапазон изменения

S

имя файла

string

вся доступная память

F

файловая переменная

TSearchRec

3.3.6.2 Алгоритм решения задачи

Окно поиска файла появляется после нажатия меню Правка  Поиск по имени. После задания имени файла S и нажатии кнопки Поиск запускается процедура SBName, в которой:

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

3.3.6.3. тестовые данные

исходное состояние диалогового окна

входные данные

конечное состояние диалогового окна

нет данных

test.txt

test.txt

  1.  Поиск файла по заданным атрибутам

3.3.7.1. База данных

имя переменной

семантика

тип

диапазон изменения

S

имя файла

string

вся доступная память

F

файловая переменная

TSearchRec

3.3.7.2. Алгоритм решения задачи

Окно поиска файла появляется после нажатия меню Правка  Поиск по атрибутам. После задания имени файла S и выделении нужных атрибутов по нажатии кнопки Поиск запускается процедура SBAttr, в которой:

  •  процедуры FindFirst, FindNext ищут файл F с заданным именем S и атрибутами, указанными пользователем
  •  найденные файлы выводятся в диалоговое окно

3.3.7.3. Тестовые данные

исходное состояние диалогового окна

входные данные

конечное состояние диалогового окна

нет данных

*.*

атрибуты: архивный

test.txt

4. Экспериментальная часть

4.1. Руководство оператора

Внимание! Программа работает только с текстовыми файлами.

Для запуска программы Курсовая” необходимо запустить исполняющий файл kurs_prj.exe в операционной системе Windows. После загрузки программы пользователь попадает в основное меню программного комплекса:

4.1.1.1. Меню Файл содержит пять подпунктов: Создать, Открыть, Переименовать/ Перенести, Удалить, Выход.

При выборе подпункта Создать пользователь попадает в меню создания файла, где в строке Имя Файла необходимо написать полное местоположение файла с указанием диска, каталога, имени файла и его расширения. Для удобства пользователя нажав кнопку Обзор можно выбрать каталог, в котором будет находиться создаваемый файл. В окне Текст Файла можно написать текст, который будет содержаться в создаваемом файле. Далее нажать кнопку Создать и файл будет создан. Для выхода из подпрограммы Создание нужно нажать кнопку Отмена, после чего пользователь будет возвращен в главное окно программы.

Пример подпрограммы Создание:

При выборе подпункта Окрыть пользователь попадает в меню, предназначенное для открытия файла. В строке Имя Файла необходимо написать полное местоположение файла с указанием диска, каталога, имени файла и его расширения, либо воспользоваться кнопкой Обзор для выбора открываемого файла. По нажатии кнопки Предосмотр в окне Текст Файла отобразится содержание файла и появятся кнопки Назад и Открыть. Если пользователь открыл не тот файл, следует нажать кнопку Назад, чтобы открыть необходимый файл заново. В противном случае нажатием кнопки Открыть файл будет открыт. Кнопка Отмена закрывает данную процедуру и возващает пользователя в главное окно программы.

Пример процедуры Открытие:

При выборе процедуры Переименование/ Перенос выбранный пользователем файл может быть либо переименован, либо перенесен из исходного каталога в указанный. Чтобы переименовать файл, в строке Старое имя/из необходимо указать полностью расположение файла и его имя (вручную либо воспользовавшись кнопкой Обзор), в строке Новое имя/в – новое имя файла и его расположение, а затем нажать кнопку Ок. Если исходный и указанный каталоги одинаковы, файл будет переименован, если же каталоги различаются, то перенесен.

Пример процедуры переименования/переноса файла:

Подменю Удалить предназначено для удаления файла. В строке Имя Файла указывается расположение файла и его имя (вручную либо воспользовавшись кнопкой Обзор), а затем нажатием нажатием кнопки Удалить файл удаляется. При нажатии кнопки Отмена подпрограмма удаления закрывается и пользователь возвращается в главное меню программы.

Выбор подпункта Выход программа закрывается.

4.1.1.2 Меню Правка содержит два подпункта: Копировать и Поиск. Поиск в свою очередь делится на поиск По имени и поиск По атрибутам.

Подпункт Копировать предназначен для копирования файла. Для этого в строке Старое имя/из необходимо указать полностью расположение файла и его имя (вручную либо воспользовавшись кнопкой Обзор), в строке Новое имя/в – новое имя файла и его расположение, а затем нажать кнопку Копировать.

Подпункт Поиск по имени предназначен для поиска файла с указанным именем в указанной директории. Для этого в строке Имя файла задается каталог, в котором файл ищется, и имя файла с расширением. Если нужно файл с известным именем, но неизвестным расширением, следует написать имя файла следующим образом: имя_файла.*. Если же известно расширение и не неизвестно имя, тогда имя файла следует написать в виде: *.расширение. (Примечание: если файлов с  заданным расширением несколько, будут отображены все файлы). В случае необходимости поиска всех файлов, содержащихся в указанной директории, имя файла записывается в виде *.*. Для непосредственного поиска необходимо нажать на кнопку Поиск. Все найденные файлы отображаются в окне Найденные файлы. Чтобы повторить процедуру поиска, нужно нажать кнопку Новый поиск, после чего строка с именем файла и перечень найденных файлов очистятся. При нажатии кнопки Отмена подпрограмма Поиск по имени закроется и пользователь будет возвращен в главное окно программы.

Пример поиска по имени:

Подпункт Поиск по атрибутам предназначен для поиска файла с заданными атрибутами. В строке Имя файла задается папка, в которой файл ищется, а также его имя (вариации поиска файлов описаны пунктом выше). Далее в столбце Атрибуты выделяются необходимые атрибуты, по которым ищется файл. (Примечание: если ни один из атрибутов не будет выделен, программа найдет все файлы, находящиеся в каталоге). . Все найденные файлы отображаются в окне Найденные файлы. Чтобы повторить процедуру поиска, нужно нажать кнопку Новый поиск, после чего строка с именем файла и перечень найденных файлов очистятся. При нажатии кнопки Отмена подпрограмма Поиск по атрибутам закроется и пользователь будет возвращен в главное окно программы.

Пример поиска по атрибутам:

4.1.2 Главное окно программного комплекса

Рассмотрим главное окно программы. Оно содержит пять окон (Имя файла, Путь, Размер (Байт), Дата создания, Текст файла), столбец выделяемых элементов (Атрибуты: Только чтение, Архивный, Системный, Скрытый) и кнопку Сохранить.

После открытия файл в окне Имя файла отображается его имя, в окне Путь – имя диска и каталог, в которых открытый файл содержится, в окне Размер (Байт) отображается размер файла, в окне Дата создания – число и время создания файла, а в окне Текст файла – текст, содержащийся в открытом файле. Столбец Атрибуты показывает, какие атрибуты присущи открытому файлу. Также отмечая или удаляя необходимые атрибуты, пользователь может изменить атрибуты файла самостоятельно. В окне Текст файла можно отредактировать содержимое открытого файла или что-либо написать. Для сохранения измененного файла нужно нажать кнопку Сохранить, которая находится подокном Текст файла.

4.1.3. Перечень возникающих сообщений

Файл не существует” – сообщение появляется в случае, если открываемый файл не существует

Файл успешно удален” – данное сообщение возникает в случае, если файл успешно удален

Ошибка при удалении файла: файл не существует или его удаление невозможно” – сообщение появляется в случае невозможности удаления файла. Проверьте его существование и атрибуты (если стоит Только чтение, файл не удалится).

Ошибка при переименовании файла: файл не существует или его переименование невозможно” - сообщение появляется в случае невозможности переименования файла. Проверьте его существование и атрибуты (если стоит Только чтение, файл не удалится).

4.2. Контрольный пример

  1.  Запустите исполняющий файл kurs_prj.exe. Перед вами появится главное окно программы, все элементы которого были описаны выше.
  2.  Выберите пункт Файл  Создать. Введите полный путь и имя файла, например c:\kurs_prj\sample\sample.txt. В окне Текст Файла введите некий текст, например: “Демонстрация ввода текста в создаваемый файл”. Нажмите кнопку Создать. Файл создан.
  3.  Выберите пункт Файл  Открыть. Воспользовавшись кнопкой Обзор выберите файл c:\kurs_prj\sample\sample.txt, затем нажмите кнопку Предосмотр и подтвердите открытие кнопкой Открыть. Файл откроется в главном окне программы.
  4.  Выберите пункт Правка  Поиск  По атрибутам. В строке Имя файла введите: c:\kurs_prj\sample\*.*, в столбце Атрибуты выберите Архивный и нажмите Поиск. В поле Найденные файлы появится имя файла sample.txt. Выйдите из подпрограммы Поиск по атрибутам нажатием кнопки Отмена.
  5.  Выберите пункт Файл  Переименовать/Перенести. С помощью кнопки Обзор выберите файл c:\kurs_prj\sample\sample.txt (полный путь файла и его имя появятся  в строке Старое имя/из). В строке Новое имя/в введите c:\kurs_prj\sample\sample2.txt и нажмите ОК. Файл будет переименован в sample2.txt.
  6.  Выберите пункт Файл  Открыть. Воспользовавшись кнопкой Обзор выберите файл c:\kurs_prj\sample\sample.txt, затем нажмите кнопку Предосмотр и подтвердите открытие кнопкой Открыть. Файл откроется в главном окне программы.
  7.  Выберите пункт Файл  Удалить. В строку Имя Файла введите полный путь и имя файла: c:\kurs_prj\sample\sample2.txt. Нажмите Удалить для удаления файла. При успешном удалении файла появится окно: “Файл успешно удален”.

5. Листинг программы

5.1. Unit 1

unit Unit1;

interface

uses

 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

 StdCtrls, Menus;

type

 TForm1 = class(TForm)

   Memo1: TMemo;

   Memo2: TMemo;

   Memo3: TMemo;

   MainMenu1: TMainMenu;

   File1: TMenuItem;

   new: TMenuItem;

   Open: TMenuItem;

   Rename: TMenuItem;

   Delete: TMenuItem;

   Exit: TMenuItem;

   Memo4: TMemo;

   Memo5: TMemo;

   CheckBox1: TCheckBox;

   CheckBox2: TCheckBox;

   CheckBox3: TCheckBox;

   CheckBox4: TCheckBox;

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Label5: TLabel;

   N1: TMenuItem;

   Label6: TLabel;

   N2: TMenuItem;

   N3: TMenuItem;

   N5: TMenuItem;

   N6: TMenuItem;

   Button1: TButton;

   procedure newClick(Sender: TObject);

   procedure OpenClick(Sender: TObject);

   procedure DeleteClick(Sender: TObject);

   procedure RenameClick(Sender: TObject);

   procedure N5Click(Sender: TObject);

   procedure N6Click(Sender: TObject);

   procedure N2Click(Sender: TObject);

   procedure ExitClick(Sender: TObject);

   procedure Button1Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

 var

 Form1: TForm1;

 Edit1: TEdit;

   Memo1: TMemo;

   Memo2: TMemo;

   Memo3: TMemo;

   Button1: TButton;

implementation

uses unit2, Unit3, Unit4;

{$R *.DFM}

procedure TForm1.newClick(Sender: TObject);

begin

Form2.Caption:='Создание';

Form2.Visible:=true;

Form2.Button2.Visible:=True;

Form2.Button7.Visible:=True;

end;

procedure TForm1.OpenClick(Sender: TObject);

begin

Form2.Caption:='Открытие';

Form2.Visible:=True;

Form2.Button4.Visible:=True;

Form2.Button7.Visible:=true;

end;

procedure TForm1.DeleteClick(Sender: TObject);

begin

Form2.Caption:='Удаление';

Form2.Label2.Visible:=False;

form2.Memo1.Visible:=False;

Form2.Button6.Visible:=true;

Form2.Visible:=true;

end;

procedure TForm1.RenameClick(Sender: TObject);

begin

Form3.Caption:='Переименование/Перенос';

Form3.Button1.Visible:=true;

Form3.Button4.Visible:=true;

Form3.Visible:=true;

end;

procedure TForm1.N5Click(Sender: TObject);

begin

Form4.Caption:='Поиск по имени';

Form4.Visible:=true;

end;

procedure TForm1.N6Click(Sender: TObject);

begin

Form4.Caption:='Поиск по атрибутам';

Form4.Panel1.visible:=True;

Form4.Button4.Visible:=true;

Form4.Visible:=True;

end;

procedure TForm1.N2Click(Sender: TObject);

begin

Form3.Visible:=true;

Form3.Button4.Visible:=true;

Form3.Button3.Visible:=True;

end;

procedure TForm1.ExitClick(Sender: TObject);

begin

close;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

If FileExists(Form1.Memo3.text+Form1.Memo2.text) then

Form1.Memo1.Lines.SaveToFile(Form1.Memo3.text+Form1.Memo2.text)

Else

Showmessage('Файл не существует');

end;

end.

5.2 Unit 2

unit Unit2;

interface

uses

 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

 StdCtrls, Buttons, FileCtrl;

type

 TForm2 = class(TForm)

   Button2: TButton;

   Edit1: TEdit;

   Button1: TButton;

   Memo1: TMemo;

   Button3: TButton;

   Button4: TButton;

   Button5: TButton;

   Button6: TButton;

   Label1: TLabel;

   Label2: TLabel;

   Button7: TButton;

   OpenDialog1: TOpenDialog;

   procedure Button2Click(Sender: TObject);

   procedure Button1Click(Sender: TObject);

   procedure Button4Click(Sender: TObject);

   procedure Button5Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

   procedure Button6Click(Sender: TObject);

   procedure Button7Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

 var

 Form2: TForm2;

 

implementation

Uses Unit1, Unit3;

{$R *.DFM}

procedure Creat(s:string);

var

F:File;

begin

ForceDirectories(ExtractFileDir(s));

AssignFile(F,s);

Rewrite(F);

CloseFile(F);

end;

Procedure Inf(s:string);

var

f:file of byte;

H:integer;

begin

AssignFile(f,s);

reset(f);

Form1.Memo4.text:= inttostr(filesize(f));

Form1.memo2.Text:=ExtractFileName(s);

Form1.memo3.text:=ExtractFilePath(s);

closefile(f);

H:=FileOpen(s, fmOpenreadWrite or fmShareDenyNone);

Form1.Memo5.Text:=DateTimeToStr(FileDateToDateTime( FileGetDate(H)));

FileClose(H);

end;

Procedure getattr(s:string);

begin

if filegetattr(s)and faArchive <>0 then

Form1.CheckBox2.Checked:=true

else

Form1.CheckBox2.Checked:=False;

if filegetattr(s)and faSysFile <>0 then

Form1.CheckBox3.Checked:=true

else

Form1.CheckBox3.Checked:=False;

if filegetattr(s)and faHidden <>0 then

Form1.CheckBox4.Checked:=true

else

Form1.CheckBox4.Checked:=False;

end;

procedure TForm2.Button2Click(Sender: TObject);

begin

Creat(Form2.Edit1.Text);

Form2.Memo1.Lines.SaveToFile(Form2.Edit1.Text);

Form2.Edit1.Text:='';

Form2.Memo1.Lines.Clear;

Form2.Button7.Visible:=False;

Form2.Button2.Visible:=False;

Form2.Visible:=False;

end;

procedure TForm2.Button1Click(Sender: TObject);

begin

Form2.Button2.Visible:=False;

Form2.Button3.Visible:=False;

Form2.Button4.Visible:=False;

Form2.Button5.Visible:=False;

Form2.Button6.Visible:=False;

Form2.Button7.Visible:=False;

Form2.Visible:=False;

end;

procedure TForm2.Button4Click(Sender: TObject);

begin

If FileExists(Form2.Edit1.text) Then

begin

Form2.Memo1.Lines.LoadFromFile(Form2.Edit1.text);

Form2.Button3.Visible:=true;

Form2.Button4.Visible:=False;

Form2.Button5.Visible:=True;

Form2.Button7.Visible:=False;

end

else

Showmessage('Файл не существует');

end;

procedure TForm2.Button5Click(Sender: TObject);

begin

Form2.Button4.Visible:=True;

Form2.Button3.Visible:=False;

Form2.Button5.Visible:=False;

Form2.Button7.Visible:=True;

Form2.Edit1.Text:='';

Form2.Memo1.Lines.Clear;

end;

procedure TForm2.Button3Click(Sender: TObject);

begin

Form1.Memo1.Lines.LoadFromFile(Form2.Edit1.text);

inf(Form2.Edit1.text);

getattr(Form2.Edit1.text);

Form2.Button3.Visible:=False;

Form2.Edit1.Text:='';

Form2.Button5.Visible:=False;

Form2.Visible:=False;

Form2.Memo1.Lines.Clear;

end;

procedure TForm2.Button6Click(Sender: TObject);

begin

if DeleteFile(Form2.Edit1.Text)then

begin

ShowMessage('Файла успешно удален');

Form2.Visible:=False;

Form2.Label2.Visible:=true;

Form2.memo1.Visible:=true;

Form2.Button6.Visible:=false

end

else

ShowMessage('Ошибка при удалении файла:файл не существует, или не может быть удален ');

end;

procedure TForm2.Button7Click(Sender: TObject);

begin

Form2.OpenDialog1.Execute;

Form2.Edit1.Text:=OpenDialog1.FileName;

end;

end.

5.3. Unit 3

unit Unit3;

interface

uses

 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

 StdCtrls;

type

 TForm3 = class(TForm)

   Button1: TButton;

   Button2: TButton;

   Edit1: TEdit;

   Edit2: TEdit;

   Label1: TLabel;

   Label2: TLabel;

   Button3: TButton;

   Button4: TButton;

   OpenDialog1: TOpenDialog;

   procedure Button1Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

   procedure Button4Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

 var

 Form3: TForm3;

implementation

Uses Unit1,Unit2;

{$R *.DFM}

Procedure Copy(s1,s2:string);

var

Vf1, Vf2 : file;

NRead, NWrite: Integer;

Buf: array[1..1024] of Char;

begin

AssignFile(Vf1, s1);

Reset(Vf1, 1);

AssignFile(Vf2, s2);

Rewrite(Vf2, 1);

repeat

BlockRead(Vf1, Buf, SizeOf(Buf), NRead);

BlockWrite(Vf2, Buf, NRead, NWrite);

until (NRead = 0) or (NWrite <> NRead);

CloseFile(Vf1);

CloseFile(Vf2);

end;

procedure TForm3.Button1Click(Sender: TObject);

begin

if RenameFile(Form3.edit1.Text,Form3.edit2.Text)

then

begin

Form3.Button4.Visible:=False;

Form3.Button1.Visible:=False;

Form3.Visible:=False;

end

else

ShowMessage('Ошибка при переименовании Файла: Файл не существует или его переименование невозможно');

end;

procedure TForm3.Button2Click(Sender: TObject);

begin

Form3.Button1.Visible:=False;

Form3.Button3.Visible:=False;

Form3.Button4.Visible:=False;

Form3.Visible:=False;

end;

procedure TForm3.Button3Click(Sender: TObject);

begin

Copy(Form3.edit1.text,Form3.Edit2.text);

Form3.Button3.Visible:=false;

Form3.Visible:=False;

end;

procedure TForm3.Button4Click(Sender: TObject);

begin

Form3.OpenDialog1.Execute;

Form3.Edit1.Text:=Form3.OpenDialog1.FileName;

end;

end.

5.4. Unit 4

unit Unit4;

interface

uses

 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

 StdCtrls, Mask, ExtCtrls;

type

 TForm4 = class(TForm)

   Edit1: TEdit;

   Button1: TButton;

   Memo1: TMemo;

   Panel1: TPanel;

   Button2: TButton;

   Button3: TButton;

   CheckBox1: TCheckBox;

   CheckBox2: TCheckBox;

   CheckBox3: TCheckBox;

   CheckBox4: TCheckBox;

   Button4: TButton;

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   procedure Button1Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);

   procedure Button4Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form4: TForm4;

 Memo1: TMemo;

 CheckBox1: TCheckBox;

 CheckBox2: TCheckBox;

 CheckBox3: TCheckBox;

 CheckBox4: TCheckBox;

 implementation

{$R *.DFM}

Procedure sbname(s:String);

var

F:TsearchRec;

begin

if FindFirst(S,faAnyfile,F)=0

then

begin

Form4.Memo1.Lines.Add(F.Name);

While FindNext(F)=0 do

Form4.Memo1.Lines.Add(F.Name);

end;

FindClose(F);

end;

Procedure sbAttr(s:string);

var

F:TSearchRec;

Attr:integer;

Begin

if Form4.CheckBox1.Checked=true then

attr:=faReadOnly

Else

attr:=0;

if Form4.CheckBox2.Checked=true then

attr:=attr+faArchive;

if Form4.CheckBox3.Checked=true then

attr:=attr+faSysFile;

if Form4.CheckBox4.Checked=true then

attr:=attr+faHidden;

if FindFirst(S,Attr,F)=0

then

begin

Form4.Memo1.Lines.Add(F.Name);

While FindNext(F)=0 do

Form4.Memo1.Lines.Add(F.Name);

end;

FindClose(F);

End;

procedure TForm4.Button1Click(Sender: TObject);

begin

sbname(Form4.Edit1.text);

end;

procedure TForm4.Button3Click(Sender: TObject);

begin

Form4.Visible:=False;

Form4.Panel1.Visible:=false;

Form4.Button4.Visible:=False;

end;

procedure TForm4.Button2Click(Sender: TObject);

begin

Form4.Edit1.Text:='';

Form4.Memo1.Lines.Clear;

Form4.CheckBox1.Checked:=False;

Form4.CheckBox2.Checked:=False;

Form4.CheckBox3.Checked:=False;

Form4.CheckBox4.Checked:=False;

end;

procedure TForm4.Button4Click(Sender: TObject);

begin

sbAttr(Form4.Edit1.text);

end;

end. 

44


 

А также другие работы, которые могут Вас заинтересовать

70367. АДМИНИСТРАТИВНЫЙ РЕГЛАМЕНТ КАК НОРМАТИВНЫЙ ПРАВОВОЙ АКТ: ПРОБЛЕМЫ ПРИМЕНЕНИЯ 32.21 KB
  В статье рассматривается административный регламент как нормативный правовой акт органов исполнительной власти Российской Федерации субъектов Российской Федерации и органов местного самоуправления муниципальных образований актуальные вопросы реализации административных регламентов.
70368. Педагогическое обоснование оптимизации физических нагрузок профессиональных футболистов в условиях акклиматизации спортсменов на выездных учебно-тренировочных сборах 29.05 KB
  В условиях выездных учебно-тренировочных сборов особенно при значительных отличиях природно-климатических условий организм спортсменов испытывает значительные физиологические нагрузки что может быть причиной дезадаптации и негативного воздействия на здоровье и результаты спортсменов.
70370. ТЕОРИЯ КОНЦЕПЦИИ «ЗЛОУПОТРЕБЛЕНИЕ ГРАЖДАНСКИМИ ПРАВАМИ» 2.39 MB
  Определение и установление внутренних пределов осуществления субъективного гражданского права одна из наиболее запутанных сложных для понимания и разрешения правовых проблем. В этом механизме установления юридических границ ярко выражена основная цель права предоставить обществу...
70371. «ИНЫЕ ФОРМЫ» ЗЛОУПОТРЕБЛЕНИЙ ГРАЖДАНСКИМИ ПРАВАМИ 106 KB
  Итак, исходя из последовательного анализа содержания статьи 10 ГК РФ, законодателем запрещены следующие формы реализации права: а) шикана - действие лица с четким намерением, т.е. с прямым умыслом причинить вред другому лицу (редкое явление в праве)...
70372. РОЛЬ И МЕСТО ПОНЯТИЯ «ЗЛОУПОТРЕБЛЕНИЕ ПРАВОМ» В РОССИЙСКОЙ ПРАВОВОЙ ДЕЙСТВИТЕЛЬНОСТИ 62.5 KB
  С точки зрения воплощения соответствующих теоретических идей представляется небезынтересным обращение к российскому опыту современного регулирования отношений связанных со злоупотреблением правом. В отечественной юридической литературе сформировалось устойчивое мнение...
70373. ВСТРЕЧНЫЙ ИСК: ЗАЩИТА ИЛИ НАПАДЕНИЕ? 38.5 KB
  Предъявление встречного иска осуществляется по общим правилам предъявления иска. Такой способ является самым эффективным и самостоятельным средством защиты ответчика против первоначального иска истца. Условия предъявления встречного иска.
70374. ГРАЖДАНСКО-ПРАВОВАЯ САНКЦИЯ ЗА НАРУШЕНИЕ ЗАПРЕТА ЗЛОУПОТРЕБЛЕНИЯ ПРАВОМ 105.5 KB
  Как известно в самом общем виде злоупотребление гражданским правом является умышленным правонарушением сопряженным с выходом лица за внутренние пределы имеющегося в его распоряжении того или иного гражданского права правомочия...
70375. ЗЛОУПОТРЕБЛЕНИЕ ПРАВОМ: ТЕОРИЯ И ПРАВОПРИМЕНИТЕЛЬНАЯ ПРАКТИКА 169.5 KB
  Основное значение принципа недопустимости злоупотребления правом Жизнь настолько многообразна что законодатель объективно не в состоянии прямо установить пределы проявления интересов через объем корреспондирующих обязанностей установление запретов объем прав управомоченного лица...