MS-DOS для программиста© Александр Фролов, Григорий ФроловТом 19, М.: Диалог-МИФИ, 1995, 253 стр. 3.4. Работа с файламиВ этом разделе мы рассмотрим функции MS-DOS, предназначенные для создания, открытия, удаления, переименования и перемещения файлов. Операции чтения из файла и записи в файл будут описаны в следующем разделе. Создание файловДля создания файла предназначена функция 3Ch прерывания INT 21h. С помощью этой функции может быть создан файл как в текущем, так и в любом другом каталоге. Если файл с указанным именем уже существует, он обрезается до нулевой длины. Будьте осторожны при использовании этой функции - она может уничтожить файл. Дополнительно функция 3Ch выполняет операцию открытия только что созданного файла, возвращая программе идентификатор файла. При создании файла программа может указать атрибуты файла. Приведем параметры вызова функции создания
файла:
При выполнении этой функции возможно возникновение следующих ошибок:
Операционная система игнорирует попытки создания с помощью этой функции каталога или метки диска. Для того чтобы при создании файла случайно не
уничтожить содержимое уже существующего файла с
таким же именем, программа может использовать
функцию 5Bh. Эта функция проверяет заданный путь
на предмет наличия указанного файла. Если такой
файл уже существует, функция возвращает
программе признак ошибки:
Если вам требуется временный файл, вы можете
создать его с помощью функции 5Ah:
Операционная система не будет автоматически удалять созданный временный файл после завершения работы программы или перезагрузки. Программа должна сама удалить этот файл. Открытие файлаПеред тем, как начать работу с файлом, его нужно
открыть. Функции, создающие новые файлы,
открывают их автоматически. Для того, чтобы
открыть существующий файл, вы можете
воспользоваться функцией 3Dh:
С помощью функции 3Dh можно открыть любой файл (но не каталог). Если требуется вид доступа "запись", открываемый файл не должен иметь атрибут "Только читаемый". Для использования битов 4...7 (управляющих доступом к файлу другими программами в сети) должна быть запущена программа share.exe . Если используется бит наследования, то порожденному процессу наследуются вид доступа, запрошенный при открытии файла. Функция 6Ch обладает расширенными возможностями
по созданию и открытию файлов:
Регистр BX на входе задает флаги расширенного
режима открытия файла в следующем формате:
Описанная выше функция является как бы комбинацией функций 3Dh и 3Ch (открытие и создание файла). Она удобна, но при ее использовании программа должна убедиться в том, что версия MS-DOS не ниже, чем 4.0. Удаление файлаУдалить файл можно при помощи функции 41h
прерывания INT 21h :
С помощью этой функции нельзя удалить файл, имеющий атрибут "Только читаемый". Под удалением файла понимается вычеркивание файла из каталога и освобождение всех принадлежавших ранее этому файлу кластеров. Эти кластеры отмечаются в таблице размещения файлов как свободные. При стирании файлов не происходит уничтожение информации, записанной на диске, поэтому в некоторых случаях можно полностью восстановить случайно удаленные файлы. Переименование или перемещение файлаПрограмма может изменить имя файла или
переместить его в другой каталог того же самого
диска, воспользовавшись функцией 56h прерывания
INT 21h :
С помощью этой функции можно переименовать (но не переместить) не только файл, но и каталог. Функции библиотеки Borland C++Стандартная библиотека Borland C++ содержит функции для работы с файлами. Эти функции можно разделить на две группы - функции низкого уровня и функции ввода/вывода потоком. Вторая группа функций использует буферизацию и будет рассмотрена в разделе, посвященном буферизованному вводу/выводу. Функции низкого уровня отображаются на описанные выше функции прерывания INT 21h (а также на функции этого же прерывания, предназначенные для чтения или записи, позиционирования и т. д.). creatДля создания файла можно использовать функцию creat : int creat (char *filename, int mode); Эта функция и ее параметры описаны в файлах io.h, sys\types.h, sys\stat.h, errno.h. Первый параметр определяет путь создаваемого файла и его имя. Если файл с указанным именем существует, и не имеет атрибут "Только читаемый", функция сбрасывает длину файла до нуля. Содержимое файла при этом уничтожается. Второй параметр позволяет задать атрибуты
создаваемого файла. Он может иметь следующие
значения:
В операционной системе MS-DOS невозможно создать файл, в который можно было бы писать, но из которого было бы нельзя читать информацию. Поэтому если указать второй параметр как S_IWRITE, будет создан такой файл, для которого разрешены как операция записи, так и операция чтения. После создания файла функция creat открывает новый файл, возвращая идентификатор файла или код ошибки. openМощная функция open предназначена как для открытия существующих файлов, так и для создания новых: int open (char *filename, int oflag [, int pmode]); Первый и третий параметры этой функции аналогичны параметрам функции creat , причем третий параметр нужен только при создании нового файла. Квадратные скобки указывают на то, что этот параметр можно не указывать. Параметр oflag может являться результатом
логической операции ИЛИ над следующими
константами, определенными в файле fcntl.h:
closeДля того, чтобы закрыть файл, открытый функциями creat или open , нужно использовать функцию close : int close (int handle); В качестве параметра функции передается идентификатор файла, полученный при открытии или создании файла. Функция возвращает 0 при успешном закрытии файла или -1 при ошибке. Коды ошибокКод ошибки для этой и других функций стандартной библиотеки Borland C++ записывается в глобальную переменную errno. |