Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Данные в файле


Автор: Rays 29.11.2009, 17:31
Здравствуйте! 
В коде  что-то упустил - не могу понять, почему не работает, помогите, пожалуйста разобраться!
Необходимо в файле ставить первые 20 байт, остальное удалить.
Приведу отрезок кода, где работаю именно с файлом.
Код

openf:  push    ds
lds    dx,namadr       ; адрес найденного имени в ds:dx
mov    ax,3d01h        ; открыть только для записи
int    21h
pop    ds
jnc    ukazf              
lea    dx,ertxt2
jmp    errors

ukazf:
XOR cx,cx
mov dx,0015h
mov ax,4200h             ; переношу указатель от начала файла на 20 байт
int 21h
jnc    closef
lea    dx,ertxt3
jmp    errors
closef: mov    bx,ihandle    ; взять номер искомого файла
mov    ah,3eh    ; закрыть файл
int    21h

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

Еще пробовал вариант считать 20 байт и переписать их заново от начала файла:
Код

openf:  push    ds
lds    dx,namadr       ; адрес найденного имени в ds:dx
mov    ax,3d02h        ; открыть для чтения и записи
int    21h
pop    ds
jnc    readf
lea    dx,ertxt2
jmp    errors
readf:  mov    bx,ax    ; номер искомого файла
mov    ihandle,ax    ;    сохранить его
mov    cx,0015h    ;    число читаемых байтов - 20
lea    dx,buffer    ;    адрес буфера в/в
mov    ah,3fh    ;    читать из файла
int    21h
jnc    ukazf
lea    dx,ertxt3
jmp    errors
ukazf: push ax
XOR cx,cx
XOR dx,dx
mov ax,4200h
int 21h
jnc    writef
lea    dx,ertxt5
jmp    errors
writef: pop ax
mov    cx,ax    ; число прочитанных байтов
mov    bx,ihandle      ; взять номер искомого файла
lea    dx,buffer    ;    адрес буфера в/в
XOR al,al
mov    ah,40h          ; писать в файл
int    21h
jnc    closef
lea    dx,ertxt4
jmp    errors
closef: mov    bx,ihandle    ; взять номер искомого файла
mov    ah,3eh    ; закрыть файл
int    21h

Автор: airyashov 30.11.2009, 08:39
Цитата(Rays @  29.11.2009,  17:31 Найти цитируемый пост)
Т.е.  здесь я открываю необходимый файл, перемещаю указатель на 20 байт от начала и закрываю. По идее, все данные, что после указателя, должны удалиться? 

где Вы прочитали такую чушь


Цитата(Rays @  29.11.2009,  17:31 Найти цитируемый пост)
ще пробовал вариант считать 20 байт и переписать их заново от начала файла:

только нужно считать, потом закрыть, потом создать и усечь файл, записать, закрыть

Автор: Rays 1.12.2009, 22:22
Цитата(airyashov @ 30.11.2009,  08:39)
где Вы прочитали такую чушь

только нужно считать, потом закрыть, потом создать и усечь файл, записать, закрыть

Да вот, не прочитал я аткое, вариант препод предложил) 
Спасибо за совет, а что значит "усечь"?

Автор: airyashov 2.12.2009, 10:44
усечь - открыть функцией 3сh

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)