Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
HFile – хэндл того файла, в котором перемещается указатель.Содержание книги
Поиск на нашем сайте
2) IDistanceToMove – это число символов, на которое необходимо передвинуть указатель файла. Так как тип этого аргумента LONG, то невозможно переместить указатель файла больше, чем на 2*32 байта. Если необходимо передвинуть указатель более чем на 2*32 байта, то в этом случае необходимо воспользоваться третьим аргументом функции, через который можно передать указатель на буфер, содержащий старшие тридцать два разряда требуемого значения. 3) PLONG lpDistanceToMoveHigh – указатель на буфер со старшими 32-мя байтами расстояния для перемещения указателя.
Таким образом, при определении нового значения указателя файла используется следующая формула: НЗУ=СЗУ+ IDistanceToMove+ * lpDistanceToMoveHigh,
Где НЗУ – новое значение указателя; СЗУ – старое значение указателя; Функция SetFilePointer возвращает новое значение указателя файла. В том случае, когда 32 разрядов для этого мало, старшие тридцать два разряда записываются по адресу lpDistanceToMoveHigh. 4) dwMoveMethod определяет точку отсчёта для перемещения указателя файла. Возможные значения этого аргумента следующие:
Функция при успешном завершении возвращает новое значение указателя. Но возможны ещё два случая. Во-первых функция может вернуть значение 0хffffffff, при этом слово, на которое указывает третий аргумент может быть нулевым. Это означает, что при работе функции произошла ошибка. Во-вторых функция может вернуть значение 0хffffffff, при этом слово на которое указывает третий аргумент может быть не равно нулю. В этом случае для того, чтобы определить произошла ли ошибка, необходимо вызвать функцию GetLastError(). Если эта функция вернёт значение, отличное от NO_ERROR, то это будет являться сообщением об ошибке.
Запись в файл или устройство Функция DOS 40h — Запись в файл или устройство Ввод: АН = 40h ВХ = идентификатор СХ = число байт DS:DX = адрес буфера с данными Вывод: CF = 0 и АХ = число записанных байт, если не произошла ошибка CF = 1 и АХ = 05h, если доступ запрещен, 06h, если неправильный идентификатор
Если при записи в файл указать СХ = 0, файл будет обрезан по текущему значению указателя. При записи в файл на самом деле происходит запись в буфер DOS, данные из которого сбрасываются на диск при закрытии файла или если их количество превышает размер сектора диска. Для немедленного сброса буфера можно использовать функцию 68h (функция fflush в С). Пример для DOS 13.2. Прямой доступ к файлу. Модифицируем созданный ранее файл в примере 13.1 MYFILE.txt, содержащий строку “Файл номер 1”, в которой следует заменить 1 на 2а. ; В сегменте команд ; Откроем файл mov AH,3Dh;Функция открытия файла mov AL,2;Доступ для чтения-записи mov DX,offset fname;Адрес имени файла int 21h mov handle,AX;Сохраним дескриптор ;Установим указатель на байт номер 11 mov AH,42h;Функция установки указателя mov AL,0;Режим - от начала файла mov BX,handle;Дескриптор mov CX, 0;Старшая половина указателя mov DX, 11;Младшая половина указателя int 21h ;Модифицируем файл mov AH,40h;Функция записи mov BX,handle;Дескриптор mov CX,2;Число записываемых байтов mov DX,offset mod;Отсюда выводить int 21h ;В сегменте данных mod db '2a';Буфер вывода handle dw 0;Ячейка для дескриптора fname db 'MYFILE.txt', 0;Имя файла в формате ASCIIZ При модификации будет произведена как замена последнего байта файла, так и увеличения длины файла на 1 байт. Если необходимо задать положение указателя от конца файла, то для этого в параметрах функции 42h следует указать режим 02, а в регистровую пару CX:DX поместить число -1 (так как мы хотим сместиться на 1 байт влево от конца файла); 32- разрядное число -1 имеет машинное представление FFFFFFFFh. Поэтому строки заполнения регистров СХ и DX будут выглядеть следующим образом: Mov CX,0FFFFh Mov DX,0FFFFh Пример 13.3. Чтение файла ;В сегменте команд ;Откроем файл mov AH,3Dh; Функция открытия файла mov AL,2; Доступ для чтения-записи mov DX,offset fname; Адрес имени файла int 21h mov handle,AX; Сохраним дескриптор ; Поставим запрос на чтение 80 байт mov AH,3Fh; Функция чтения mov BX,handle; Дескриптор mov cx,80; сколько читать mov DX,offset bufin; СЮда int 21h mov CX,AX; Сколько реально прочитали ; Выведем прочитанное на экран mov AH,40h; Функция записи mov ВX,1; Дескриптор стандартного вывода mov DX,offset bufin; Отсюда выводить (СХ байт) int 21h ; В сегменте данных bufin db 80 dup (' '); Буфер ввода handle dw 0; Ячейка для дескриптора fname db 'MYFILE.001',0; Имя файла в формате ASCIIZ
Чтение файла осуществляется вызовом функции 3Fh, которая требует указания в качестве входных параметров дескриптора источника данных (в регистре ВХ), адреса приемного буфера (в регистрах DS:BX) и количества передаваемых байтов (в регистре СХ). Если мы хотим прочитать все содержимое файла, но не знаем точно его длину, можно в запросе на чтение указать заведомо большее число байтов (не более 65 535). Функция 3Fh сама определит длину файла и прочитает все его содержимое до конца. После возврата из DOS в регистре СХ будет содержаться число фактически прочитанных байтов. В примере содержимое АХ переносится в СХ и используется затем в качестве параметра для функции 40h, с помощью которой прочитанные данные выводятся на экран для контроля. Закрыть файл
|
||||
Последнее изменение этой страницы: 2016-09-13; просмотров: 408; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.227.89.244 (0.006 с.) |