Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2015, 17:37   #1
AndreyF1rst
Новичок
Джуниор
 
Регистрация: 26.11.2015
Сообщений: 1
По умолчанию Вывести скрытые файлы каталога на экран

День добрый, товарищи программисты. Нужна программа которая выводит сообщение о наличии скрытых файлов в каталоге.
Начал писать программу, которая выводит содержимое каталога на экран, но при установки атрибута 2h попутно выводятся и остальные файлы, не являющиеся скрытыми. TASM, DOS, COM

Код:
     .model     tiny
        .code
        org        100h         ; СОМ-файл
start:
    push cs         ;на всякий случай, приравняем cs и ds
    pop ds          ;хотя в COM-файле они и так равны
 
    mov ah, 9       ;выводим на экран сообщение
    lea dx, msgpathrequest  ;в сообщении - просьба ввести имя каталога
    int 21h
 
    mov ah, 0Ah     ;вводим с клавиатуры строку
    lea dx, path        ;указываем на буфер ввода
    int 21h         ;буфер ввода имеет хитрую структуру
                ;первый байт - макс длина буфера
                ;во второй байт система положит количество считанных символов
                ;а с третьего байта начинается собственно буфер
 
    lea dx, pathstring  ;возьмём адрес начала введённой строки
    push dx         ;сохраним - этот адрес ещё понадобится
    add dl, byte ptr[pathactual]    ;к началу строки прибавим её длину, которую вернула предыдущая функция
    xor al, al      ;поправим старший регистр
    adc dh,al       ;типа а вдруг перенос? :)
    mov di, dx      ;поскольку имя каталога должно кончаться нулём,
    mov byte ptr[di], al    ;дадим ему в конце этот нуль
 
    mov ah, 3Bh     ;сменим каталог
    pop dx          ;на тот, что вводили
    int 21h
    jc no_such_directory    ;а если его нету - пойдём ругаться  
    
    
    mov ah,1ah
        mov dx,offset dta
        int 21h
        
    ;Ищем первый файл
    mov ah,4Eh          ; поиск первого файла
        mov cx,2h           ; указываем, что хотим найти скрытые файлы
    lea dx,searchPath
        int 21h
        jc  no_more_files   ; если CF = 1 - файлы кончились
 
print:
        mov ah,9h       ; вывод
        mov dx,offset dta + 1eh ; имени файла
        int 21h
 
    ; перевод на новую строку
        mov ah,9h
        mov dx,offset crlf
    int 21h
 
        mov ah,4Fh              ; найти следующий файл
    mov dx,offset dta
        int 21h
    jc  no_more_files
    jmp print       ;закрываем цикл
 
no_such_directory:
    mov ah, 9       ;вывод сообщения
    lea dx, msgnosuchdir    ;указываем адрес сообщения
    int 21h
    jmp no_more_files
 
no_more_files:                         ; если файлы кончились,
        mov ah,9h
        mov dx,offset message
        int 21h
    
        ; задержка
        xor ax,ax
        int 16h
   
        mov ah,4ch
        int 21h
 
 
msgpathrequest    db 0Ah, 0Dh, "Enter the full directory name: $"
msgnomorefiles  db 0Ah, 0Dh, "No files found in current directory$"
msgnosuchdir    db 0Ah, 0Dh, "No such directory$"
crlf db 0Dh,0Ah,'$' ;аналогично, новая строка
searchPath  db "*.*",0
dta     db 2ch dup (?)
        db "$"
message db 'Press any key...','$'
path        label byte  ;указатель на буфер ввода строки
pathlen     db 66
pathactual  db ?
pathstring  db 66 dup (?)
 
end  start
Снимок2.jpg
AndreyF1rst вне форума Ответить с цитированием
Старый 05.12.2015, 16:50   #2
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Очень интересная ситуация, согласен.
Не забывайте также про возможно установленный бит архивации.
Но все-равно, довольно-таки странно работает функция.
Самое интересное, что если установить атрибут "только для чтения" - файл в любом случае будет попадать под критерии поиска (не важно, установлен ли соотв. бит в CX или нет). А вот с файлом у которого установлен атрибут невидимого файла - такое уже не прокатит. Он не попадет в результаты поиска при неустановленном бите в CX.
Очень хотелось бы разобраться в этом.

Для выхода из вашей ситуации - дополнительно анализируйте байт атрибута файла по DTA.

P.S. Все-таки запускаемся под NT. Быть может проблему можно отнести к VDM?

Последний раз редактировалось Базиля; 05.12.2015 в 16:59.
Базиля вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрытые файлы HTTqp Общие вопросы Delphi 8 17.03.2014 21:44
Задача на файлы. Дано предложение. Каждое слово оканчивающееся на 'a' переписать в творительном падеже. Результат вывести на экран ANTON1994 Паскаль, Turbo Pascal, PascalABC.NET 46 20.03.2013 21:09
Командный .bat файл выводящий на экран bmp файлы каталога и его подкаталогов. Avin Помощь студентам 2 11.10.2010 13:59
как вывести все имеющиеся файлы в каталоге на экран? Almost456 Паскаль, Turbo Pascal, PascalABC.NET 2 24.12.2008 20:44
Как вывести на экран имена файлов текущего каталога? (С++) Darw1n Помощь студентам 1 13.12.2008 11:10