Консультация № 197783
15.02.2020, 21:48
0.00 руб.
16.02.2020, 20:43
0 16 0
Как удалить файл в dos
вот код, но он не удаляет файл

[code lang=asm]CSEG segment
assume CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG
org 100h
Begin:
mov ax,cs
mov ds,ax

file DB 'C:\MP\result.txt',0

mov ah,41h
lea dx,file
int 21h

CSEG ends
end Begin[/code]

Обсуждение

давно
Старший Модератор
31795
6196
16.02.2020, 19:39
общий
Адресаты:
Эта функция имеет ограничения:
  • ошибка в пути к файлу;
  • файл имеет атрибут "только для чтения";
  • файл используется сетевыми ресурсами.

Используйте int 21h | 43h, чтобы изменить атрибуты файла.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
16.02.2020, 20:43
общий
Адресаты:
Вы решили проблему?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403725
6
16.02.2020, 23:47
общий
Цитата: Зенченко Константин Николаевич
не получилось
давно
Старший Модератор
312929
1973
17.02.2020, 06:19
общий
А это нормально, что символьная строка с именем файла находится внутри кодового сегмента, прямо между командами?
давно
Старший Модератор
31795
6196
17.02.2020, 16:25
общий
Адресаты:
Цитата: Коцюрбенко Алексей Владимирович
А это нормально, что символьная строка с именем файла находится внутри кодового сегмента, прямо между командами?

Для новичка - нормально, там генерируется безвредный код, который в строках(10А и 10С) делает jmp в средину сегмента:
[code lang=asm]seg000:0100 start:
seg000:0100 mov ax, cs
seg000:0102 mov ds, ax
seg000:0104 inc bx
seg000:0105 cmp bl, [si+4Dh]
seg000:0108 push ax
seg000:0109 pop sp
seg000:010A jb near ptr 171h
seg000:010C jnb near ptr 183h[/code]
Перепрыгивая код удаления файла.


Но, это не вся проблема, даже если код нормально написан "Семерка" не дает удалить файл программе DOS/

В "ХР" нужно проверять, не помню уже как там все работает. А BOCH ставить не охота, для проверки в чистом DOS'e.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
312929
1973
17.02.2020, 16:46
общий
Адресаты:
В XP работает и на FAT32 разделе, и на NTFS (лишь бы права доступа на файл позволяли). А вот начиная с Vista уже скорее всего не получится.
давно
Посетитель
403725
6
17.02.2020, 20:08
общий
Цитата: Коцюрбенко Алексей Владимирович
дааа заработало спасибо всем за помощь, но я решил проблему так сказать методом тыка)))
давно
Посетитель
403725
6
17.02.2020, 20:28
общий
17.02.2020, 20:43
Вот рабочий вариант, который я накостылял))
CSEG segment
assume CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG
org 100h

file db "result.txt",0

Begin:
mov ax, cs
mov ds, ax
mov ah, 41h
mov dx, offset file
int 21h
mov ah, 4ch
int 21h

CSEG ends
end Begin

давно
Старший Модератор
31795
6196
17.02.2020, 21:12
общий
17.02.2020, 21:13
Адресаты:
Цитата: igor
Вот рабочий вариант, который я накостылял))

Как Вы этот код компилировали?
Попытка создать СОМ-файла дает:Error: Cannot generate COM file : data below initial CS:IP defined
Т.е. компилятор ожидал, что метка BEGIN, будет по адресу 100h, а оказалось, что:
[code lang=asm] org 100h
0100 file db "result.txt",0
010B Begin:[/code]

Попытка создать ЕХЕ-файл - дает:Warning: No stack. Об ошибках Вы не упомянули.

Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403725
6
17.02.2020, 22:31
общий
Цитата: Зенченко Константин Николаевич
хмм, а вот эту дичь я не предусмотрел exe генерится, вот com я не проверял он вообще не компилируется
давно
Посетитель
403725
6
17.02.2020, 22:40
общий
Цитата: Зенченко Константин Николаевич
CSEG segment
assume CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG
org 100h

Begin:
mov ax, cs
mov ds, ax
mov ah, 41h
mov dx, offset file
int 21h
mov ah, 4ch
int 21h

file db "result.txt",0

CSEG ends
end Begin


так с com я решил проблему, а вот exe выдает ошибку "no stack", а вот ее без понятия как исправить
давно
Старший Модератор
31795
6196
17.02.2020, 23:26
общий
Адресаты:
Это хорошо, что Вы свою ошибку поняли: данные в коде.
Вам компилятор пишет "no stack"-нет стека, т.е. нужно его добавить.


Но проблема не в этом, выше уже писали, что:
Цитата: Зенченко Константин Николаевич
Но, это не вся проблема, даже если код нормально написан "Семерка" не дает удалить файл программе DOS

Цитата: Коцюрбенко Алексей Владимирович
В XP работает и на FAT32 разделе, и на NTFS (лишь бы права доступа на файл позволяли). А вот начиная с Vista уже скорее всего не получится.

Если у Вас ОСь выше "ХР", то чтобы проверить работу своей программы, Вы должны поставить себе Виртуальную Машину(ВМ), с гостевой ОСЬю, которая позволит это сделать.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
17.02.2020, 23:31
общий
Адресаты:
Ну, как вариант сделать загрузучную флешку с DOS.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403725
6
17.02.2020, 23:40
общий
17.02.2020, 23:42
Цитата: Зенченко Константин Николаевич
это уже париться не хочется)) главное файл удаляет , а то книгу Калашникова изучаю, а там половина кода из книги вообще не запускается, может скорее всего из-за разницы в версиях компиляторов ну и + ось
давно
Старший Модератор
31795
6196
17.02.2020, 23:57
общий
Адресаты:
1) Используйте список "Кому:"(над полем ввода сообщения), тогда Ваше сообщение 100% получит адресат.
2) Цитирование, как способ отправки сообщение адресату на портале не работает.
3) Код книги писался под COMMAND.COM, а начиная с ХР - уже использовается CMD.EXE. Именно это делает информацию из книги Олега, слегка устарелой, в связи с 64-и разрядностью процессоров.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
17.02.2020, 23:59
общий
Адресаты:
3+) Но для первоначального обучения, все равно полезной.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа