Консультация № 55141
12.09.2006, 12:26
0.00 руб.
0 1 1
Здравствуйте! Расскажите пожалуйста че нибудь про работу с файлами. Как например записать в файл массив чисел или строку.

Обсуждение

Неизвестный
12.09.2006, 22:26
общий
это ответ
Здравствуйте, Whiteman!

У прерывания INT 21h есть целый ряд функций по работе с файлами.
1. Создание файла
Параметры: AH=3Ch, CX=атрибуты файла (см. намного ниже), DS:DX=адрес ASCIIZ-строки с именем файла. Результаты: если флаг CF=1, то произошла ошибка (её код в AX), файл создать не удалось. Если же CF=0, то в AX содержится файловый манипулятор (ФМ), т.е. число, идентифицирующее файл. Созданный файл автоматически открывается для записи
2. Открытие файла
Параметры: AH=3Dh, AL=режим открытия (0-чтение, 1-запись), DS:DX-адрес ASCIIZ-строки с именем файла. Результат - если CF=1, то ошибка; иначе AX=ФМ.
3. Закрытие файла
Параметры: AH=3Eh, BX=ФМ.
4. Чтение из файла
Параметры: AH=3Fh, BX=ФМ, CX=число байт для чтения, DS:DX-адрес буфера для сохранения прчитанных данных.
Результаты: а) CF=1 - ошибка. б) CF=0. AX=число реально прочитанных байт. УВАГА! Попытка чтения за концом файла не приводит к ошибке, просто количество реально прочитанных символов полагается равным 0.
5. Запись в файл
Параметры: AH=40h, BX=ФМ, CX=число байт для записи, DS:DX-адрес записываемых данных.
Результаты: CF=1 - ошибка, иначе AX=число реально записанных байт
6. Стирание файла
Параметры: AH=41h, DS:DX-адрес ASCIIZ-строки с именем файла
7. Перемещение указателя чтения-записи в файле (все байты файла нумеруются с 0)
Параметры: AH=42h, AL=метод перемещения, BX=ФМ, CX:DX-знаковое смещение указателя в байтах.
Метод перемещения: 00-от начала файла, 01-от текущей позиции, 02-от конца файла
Результат:CF=1-error, else DX:AX-новое значение указателя
8. Чтение атрибутов файла
Параметры: AX=4300h, DS:DX-адрес ASCIIZ-строки с именем файла
Результат: CF=1 - ошибка, иначе
АТРИБУТЫ в CX: бит 0 - только чтение, бит 1 - скрытый, бит 2 - системный файл, бит 4 - каталог, бит 5 - архивный.
9. Запись атрибутов файла
Параметры: AX=4301h, CX=новые атрибуты, DS:DX-имя файла
Результаты: сигнал ошибки в CF

Теория кончилась. Пример использования этих функций - в приложении. Оно записывает в новоиспечённый файл строку mess.

УДАЧИ!..


Приложение:
cseg segment ;сегмент кода assume cs:cseg, ds:dseg, ss:ssegstart: mov ax,dseg ;здесь всё начнётся mov ds,ax ;с установки DS на сегмент данных mov dx,offset fname ;загружаем имя файла, mov ah,3Ch ;который будем создавать xor cx,cx ;байт атрибутов = 0 int 21h ;создаём jc @err ;ошибка => выход mov bx,ax ;запоминаем ФМ mov ah,40h ;будем записывать mov cx,24 ;24 символа mov dx,offset mess ;строки mess int 21h jc @err ;если вдруг ошибка, выйдем mov ah,3Eh ;закроем файл, ФМ которого до сих пор в BX int 21h jc @err ;на всякий случай xor al,al ;если ошибок не было, код выхода = 0@err: mov ah,4Ch ;иначе - код ошибки int 21h ;собственно выходcseg endsdseg segmentfname db "D:\BP\BIN\MINE\opit.txt",0 ;имя файлаmess db "This opit is successful!" ;будущий контент файлаdseg endssseg segment stack db 400h dup (0) ;стэкsseg ends end start;после выполнения этой программы в файле D:\BP\BIN\MINE\opit.txt (к примеру; вы, конечно, можете задать свой файл) будет записана строка This opit is successful! .
Форма ответа