Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для Windows/Dos > Использование FindFirstFile и Find NextFile


Автор: Бор 25.7.2006, 22:38
Я начинающий програмист в этой области - чайник полный! Поглядел в MSDN за этими 2-мя  Windows API функциями и толком ничего не могу сделать. Хочу сделать прогу, выводящую на экран содержимое какой-то определенной папки, например C:\abc (уже введено в программе). С выводом на экран будет все нормально, а как пользоваться этими 2-мя функиями - ничего не пойму. Вот мой код:
------------------------------------------------------------------------------------------------------------------------------------------------
.386
.model flat, stdcall
include c:\masm615\include\kernel32.inc
MAX_PATH=70

FILETIME STRUCT 
dwLowDateTime DWORD ?
dwHighDateTime DWORD ?
FILETIME ENDS 


find_data STRUCT
dwFileAttributes   DWORD  ?
ftCreationTime     FILETIME <>
ftLastAccessTime   FILETIME  <>
ftLastWriteTime    FILETIME   <>
nFileSizeHigh      DWORD      ?
nFileSizeLow       DWORD       ?
dwReserved0        DWORD       ?
dwReserved1        DWORD        ?
cFileName          BYTE MAX_PATH DUP(?)
cAlternateFileName BYTE 14 DUP(?)
find_data ENDS

.data
adress BYTE "C:\abc",0
adress_file find_data <>
fHandle DWORD ?
name_find BYTE "*.*",0

.code
main PROC
invoke SetCurrentDirectory,ADDR adress

invoke FindFirstFile,ADDR name_find, ADDR adress_file
mov fHandle,eax
invoke FindNextFile,fHandle,ADDR adress_file
invoke FindClose, fHandle
invoke ExitProcess, 0
main ENDP

end main

--------------------------------------------------------------------------------------------------------------------------------------------------
ps: На экран не выводил. Просматривал все через отладчик. - в поле adress_file.cFileName вообще все пусто!
Прошу, помогите! Не говорите мне, что я ламер, что не заметил эту ошибку. Просто подскажите ... Пасибо. 

Автор: Kagor 25.7.2006, 23:28
Модератор: Перемещено из Новости IT/Новости из мира ASM. 

Автор: dumb 26.7.2006, 02:09
Цитата(Бор @  25.7.2006,  22:38 Найти цитируемый пост)
Просматривал все через отладчик. - в поле adress_file.cFileName вообще все пусто!

там, кстати, не пусто. там должны быть точки(2e). после FindFirst - одна точка, после FindNext - две... что они означают, рассказывать не надо? (имена это, в общем)

ок, ближе к телу:
Код

.386
.model flat, stdcall
option  casemap: none   ; case sensitive

include \masm32\include\kernel32.inc
include \masm32\include\windows.inc

includelib \masm32\lib\kernel32.lib

.data
find_rec WIN32_FIND_DATA <>
;fHandle DWORD ?
name_find BYTE "C:\hd\*.*",0

.code

main PROC

invoke FindFirstFile,ADDR name_find, ADDR find_rec
inc eax
jz error
dec eax
mov ebx,eax
next:
;
; здесь вывод имени файла
;
invoke FindNextFile,ebx,ADDR find_rec
or eax, eax
jnz next
invoke FindClose, ebx
error:
invoke ExitProcess, 0
main ENDP

end main
 

Автор: Бор 26.7.2006, 21:34
Пасибо, ща проверю код! 

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