Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прогр.docx
Скачиваний:
23
Добавлен:
21.12.2018
Размер:
2.58 Mб
Скачать

2. Создание файла с усечением существующего до нулевой длины.

Функция DOS 3Ch — Создать файл

Ввод:

Ah = 3Ch

СХ = атрибут файла

Бит 7: файл можно открывать разным процессам в Novell Netware

бит 6: не используется

бит 5: архивный бит (1, если файл не сохранялся)

бит 4: каталог (должен быть 0 для функции 3Ch)

бит 3: метка тома (игнорируется функцией 3Ch)

бит 2: системный файл

бит 1: скрытый файл

бит 0: файл только для чтения

Вывод:

DS:DX = адрес ASCIZ-строки с полным именем файла (ASCIZ-строка ASCII-символов, оканчивающаяся нулем).

CF = 0 и АХ = идентификатор файла, если не произошла ошибка

CF = 1 и АХ = 03h, если путь не найден

CF = 1 и АХ = 04h, если слишком много открытых файлов

CF = 1 и АХ = 05h, если доступ запрещен

Если файл уже существует, функция 3Ch все равно открывает его, присваивая ему нулевую длину. Чтобы этого не произошло, следует пользоваться функцией 5Bh.

Функция 5ВН создаёт файл, но если файл уже существует, содержимое его не уничтожается, а взводится флаг ошибки СF.

Пример:

LEA DX,PATH ; в сегменте данных путь: С:\ПУТЬ\ИМЯФАЙЛА, 0

; если краткое имя, то берется текущий каталог

MOV СХ,0 ; создать только для чтения, если 0 - для чтения, 1 –

; для записи

MOV АН,3СН ; функция создания файла

INT 21h ; открываем файл

JC ERRO ; ошибка, если поднят флаг СF, в АХ код ошибки,

; если ошибки нет, то в АХ описатель файла, для

; будущей работы следует его сохранить

Пример 10.1. Создание файла и запись в него строки 'Файл номер 1'.

; В сегменте данных

.data

bufout db 'Файл номер 1' ; Данные для записи в файл

buflen=$-bufout ; строка длиной в 12 байт

handle dw 0 ; Ячейка для дескриптора

fname db 'MYFILE.txt',0 ;Имя файла в формате ASCIIZ

;В сегменте команд создадим файл

.code

mov АН,3Ch ; Функция создания файла

mov CX, 0 ; Без атрибутов

mov DX, offset fname ; Адрес имени файла

int 21h

mov handle,AX ; Сохраним дескриптор файла

; Запишем в файл данные (в данном

; примере – текстовую строку)

mov AH,40h ; Функция записи в файл

mov BX,handle ; Дескриптор

mov CX,buflen ; Число записываемых байтов

mov DX,offset bufout ; Адрес данных

int 21h

; Закроем файл

mov АН,3Eh ; Функция закрытия файла

mov BX,handle ; Дескриптор

int 2lh

Функция WinAPI для создания файла

HANDLE CreateFile(

CLPCTSTR lpFileName, (1)

DWORD dwDesiredAccess, (2)

DWORD dwShareMode, (3)

LPSECURITY_ATTRIBUTES IpSecurityAttributes, (4)

DWORD dwCreationDistribution, (5)

DWORD dwFlagsAndAttributes, (6)

HANDLE hTemplateFile); (7)