Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как работать с директорией? 
:(
    Опции темы
TP@MB@Y
Дата 12.3.2005, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 18.12.2004
Где: Москва

Репутация: 2
Всего: 4



Допустим у меня есть имя директории (путь), как получить имена файлов, находящихся в ней?

Это сообщение отредактировал(а) TP@MB@Y - 12.3.2005, 16:29
PM   Вверх
oleg1973
Дата 13.3.2005, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 7
Всего: 34



FindFirstFile
FindNextFile
и таким макаром перебираеш все файлы в директории


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
TP@MB@Y
Дата 13.3.2005, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 18.12.2004
Где: Москва

Репутация: 2
Всего: 4



Цитата(oleg1973 @ 13.3.2005, 19:37)
FindFirstFile
FindNextFile
и таким макаром перебираеш все файлы в директории

Я был бы рад, если вы покажите мне описание этих ф-й на асме =)
PM   Вверх
Chingachguk
Дата 13.3.2005, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Код

Const
   DirMask = 16;
   Only_Directory: String[16]='*.???'+#0;
   GoBack: String[4] = '..\'+#0;
Var

   StartDir: String;
   WorkDir:  String;
   FoundDir: String;
   Level:    byte;
   DirInd:   Array[1..255] of Word;
   Index:    Word;
   Found:    Boolean;
Procedure Set_Dir(Addr_Str:word);
 Begin
   Asm
     mov  AH,3Bh
     mov  DX,Addr_Str
     inc  DX
     int  21h
   End;
 End;
Function Find_First(Mask,Curr_Dir_Addr,Res_Str_Addr:word):boolean;
 Begin
   Asm
     mov  @Result,False
     mov  AH,2Fh
     int  21h
     mov  AH,4Eh
     mov  CX,Mask
     mov  DX,Curr_Dir_Addr
     inc  DX
     int  21h
     jc   @Done
     mov  @Result,True
     mov  DX,BX
     lea  SI,[BX+1Eh]
     mov  BX,Res_Str_Addr
     lea  DI,[BX+1]
     mov  byte ptr [BX],0
@Move_Str: mov  AL,ES:[SI]
           inc  SI
           test AL,AL
           jz   @Done_M
           inc  byte ptr [BX]
           mov  [DI],AL
           inc  DI
           jmp  @Move_Str
@Done_M:   mov  SI,DX
           test byte ptr ES:[SI+15h],16
           jz   @Done
           {mov  byte ptr [DI],'\'
           inc  byte ptr [BX]}
@Done:
   End;
 End;
Function Find_Next(Curr_Dir_Addr:word; Res_Str_Addr:word):boolean;
 Begin
   Asm
     mov  @Result,False
     mov  AH,2Fh
     int  21h
@Next:
     mov  AH,4Fh
     mov  DX,Curr_Dir_Addr
     inc  DX
     int  21h
     jc   @Done
     mov  al,ES:[BX+21]
     cmp  al,16
     jnz  @Next
     mov  @Result,True
     mov  DX,BX
     lea  SI,[BX+1Eh]
     mov  BX,Res_Str_Addr
     lea  DI,[BX+1]
     mov  byte ptr [BX],0
@Move_Str: mov  AL,ES:[SI]
           inc  SI
           test AL,AL
           jz   @Done_M
           inc  byte ptr [BX]
           mov  [DI],AL
           inc  DI
           jmp  @Move_Str
@Done_M:   mov  SI,DX
           test byte ptr ES:[SI+15h],16
           jz   @Done
           {mov  byte ptr [DI],'\'
           inc  byte ptr [BX]}
@Done:
   End;
 End;
Function FindDir(DirAddr:Word; ResAddr:Word; Ind:Word ):Boolean;
  Var
    Count: Word;
  Begin
    FindDir:=Find_First(DirMask,DirAddr,ResAddr);
    Count:=0;
    While Count<=Ind do
      Begin
        FindDir:=Find_Next(DirAddr,ResAddr);
        inc(Count);
      End;
  End;
Procedure Get_Curr_Dir(Addr_Str:word);
 Begin
   Asm
     mov  SI,Addr_Str
     inc  SI
     mov  AH,19h
     int  21h
     add  AL,65
     mov  [SI],AL
     mov  word ptr [SI+1],'\:'
     add  SI,3
     mov  AH,47h
     mov  DL,0
     int  21h
     push DS
     pop  ES
     cld
     mov  AL,0
     mov  CX,255
     mov  DI,SI
     repne scasb
     sub  CL,254
     jnz  @N_D
     inc  CL
@N_D:neg  CL
     add  CL,3
     mov  [SI-4],CL
   End;
 End;
Begin
    {Ini}
    For Index:=1 to 255 do DirInd[Index]:=1;
    StartDir:='c:\tp\bin'+#0;
    Set_Dir(ofs(StartDir));
    Level:=0;
    DirInd[1]:=1;
    WriteLn('Process begun ... *******************************************');
    {Save Start Position}
    Get_Curr_Dir(ofs(StartDir));
    WriteLn('Start Dir = ',StartDir);{ ReadLn;}
    {}
    WorkDir:=StartDir;
    Repeat
      Index:=DirInd[Level];
      Found:=FindDir(ofs(Only_Directory),ofs(FoundDir),Index);
      if Found=True then
        Begin
          inc(DirInd[Level]);
          inc(Level);
          WorkDir:=WorkDir+'\'+FoundDir+#0;
          dec(WorkDir[0]);
          Set_Dir(ofs(WorkDir));
        End;
      if Found=False then
        Begin
          if Level>1 then Set_Dir(ofs(GoBack));
          Get_Curr_Dir(ofs(WorkDir));
          DirInd[Level]:=1;
          dec(Level);
        End;
      WriteLn('Got Dir = ',WorkDir);
      Get_Curr_Dir(ofs(WorkDir));
      WriteLn('Curr Dir = ',WorkDir);
      ReadLn;
    Until Level=0;
    Set_Dir(ofs(StartDir));
End.



--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
TP@MB@Y
Дата 13.3.2005, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 18.12.2004
Где: Москва

Репутация: 2
Всего: 4



Chingachguk
БОЛЬШУЩЕЕ СПАСИБО!

Првавдо мне надо все это дело в чистом асме написать, но я думаю справлюсь... если что спрошу здесь smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0454 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.