begin process at 2012 05 25 09:59:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Processeurs

 > 

X86

 > 

Recherche de fichier recursif


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Recherche de fichier recursif

vendredi 31 juillet 2009 à 12:11:46 | Recherche de fichier recursif

maximus4

Bonjour,
j'ai la procédure suivante pour la recherche récursive, le résultat est stocké dans un fichier texte.

Code :
invoke CreateFile,offset file, GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_HIDDEN,NULL

mov hReadWriteInput,eax

Code :
ScanRep PROC uses ebx edi esi addrRep:DWORD

LOCAL Scan[500] :BYTE
LOCAL wfd :WIN32_FIND_DATA
LOCAL hFile :HANDLE
LOCAL tailleChemin :DWORD
LOCAL SizeReadWrite :DWORD

jmp _MyJump
_backSlash db "\",0
_etoilePointEtoile db "*.*",0
_FichierInvalide db "Fichier invalide",0
_retChar db 13,10,0
_MyJump:

lea esi, wfd
lea edi, Scan
invoke lstrcpy, edi, addrRep
invoke lstrlen, edi
mov tailleChemin, eax
invoke lstrcat, edi, addr _backSlash
invoke lstrcat, edi, addr _etoilePointEtoile
invoke FindFirstFile, edi, esi
.if eax==INVALID_HANDLE_VALUE
invoke MessageBox, 0, edi, addr _FichierInvalide, 20h
.else
mov hFile, eax
mov ebx, tailleChemin
mov byte ptr [edi+ebx], 0
.while TRUE
invoke FindNextFile, hFile, esi
.break .if eax == 0
.if dword ptr [esi] != FILE_ATTRIBUTE_DIRECTORY
mov eax, esi
add eax, 2Ch
;################# COEUR ###############
; Ici se trouve la sortie des données
; eax pointe sur le nom du Fichier
; edi pointe sur le nom du Répertoire
;invoke MessageBox, 0, edi, eax, 20h
push eax
invoke lstrcat, addr buffer, addr _retChar
invoke lstrcpy, addr buffer, edi
invoke lstrcat, addr buffer, addr _backSlash
pop eax
invoke lstrcat, addr buffer, eax
push eax
invoke lstrcat, addr buffer, addr _retChar
invoke lstrlen, addr buffer
mov SizeReadWrite, eax
invoke WriteFile, hReadWriteInput, addr buffer,SizeReadWrite, addr Nbr_Octet_Ecrit, 0
pop eax
;invoke MessageBox, 0, addr buffer, edi, 20h

;#######################################
.endif
.endw
invoke FindClose, hFile
mov ebx, tailleChemin
mov byte ptr [edi+ebx], "\"
;----------------------------------------------------------
; A ce niveau on a affiché tous les fichiers
; contenus dans le répertoire courrant. Reste à retrouver
; les sous-répertoires pour y entrer en rappellant cette
; même procédure. Procédure récursive
lea esi, wfd
lea edi, Scan

invoke FindFirstFile, edi, esi
mov hFile, eax
.while TRUE
invoke FindNextFile, hFile, esi
.break .if eax == 0
.if dword ptr [esi] == FILE_ATTRIBUTE_DIRECTORY
mov eax, esi
add eax, 2Ch
.if byte ptr [eax] != "."
mov edx, tailleChemin
mov byte ptr [edi+edx+1], 0
invoke lstrcat, edi, eax
invoke ScanRep, edi
.endif
.endif
.endw
invoke FindClose, hFile
;----------------------------------------------------------
.endif
ret
ScanRep ENDP


Le problème c'est que tous les fichiers ne sont pas répertorier dans ce fichier

Merci d'avance
_-=|*max*|=-_

vendredi 31 juillet 2009 à 23:58:37 | Re : Recherche de fichier recursif

Guilou34

Il y a quelque chose qui m'échappe peut être mais je ne comprends pas pourquoi dans la première boucle WHILE TRUE on néglige les répertoires ni non plus comment on revient au début du fichier pour les traiter ensuite.
N'est-il pas plus logique d'appeler récursivement traitement_repertoire chaque fois qu'on en rencontre un, le retour ayant lieu après en avoir traité la dernière entrée?
Amicalement

samedi 1 août 2009 à 00:48:52 | Re : Recherche de fichier recursif

maximus4

Absolument en réalité j'étais parti dans la logique d'afficher dans mon fichier texte l'intégralité du répertoire de base avant de traiter les sous répertoires un a un j'aurais pu faire :

Code :
ScanRep PROC uses ebx edi esi addrRep:DWORD

LOCAL Scan[500] :BYTE
LOCAL wfd :WIN32_FIND_DATA
LOCAL hFile :HANDLE
LOCAL tailleChemin :DWORD
LOCAL SizeReadWrite :DWORD

jmp _MyJump
_backSlash db "\",0
_etoilePointEtoile db "*.*",0
_FichierInvalide db "Fichier invalide",0
_retChar db 13,10,0
_MyJump:

lea esi, wfd
lea edi, Scan
invoke lstrcpy, edi, addrRep
invoke lstrlen, edi
mov tailleChemin, eax
invoke lstrcat, edi, addr _backSlash
invoke lstrcat, edi, addr _etoilePointEtoile
invoke FindFirstFile, edi, esi
.if eax==INVALID_HANDLE_VALUE
invoke MessageBox, 0, edi, addr _FichierInvalide, 20h
.else
mov hFile, eax
mov ebx, tailleChemin
mov byte ptr [edi+ebx], 0
.while TRUE

invoke FindNextFile, hFile, esi
.break .if eax == 0
.if dword ptr [esi] != FILE_ATTRIBUTE_DIRECTORY
mov eax, esi
add eax, 2Ch
;invoke MessageBox, 0, edi, eax, 20h
;################# COEUR ###############
; Ici se trouve la sortie des données
; eax pointe sur le nom du Fichier
; edi pointe sur le nom du Répertoire
;invoke MessageBox, 0, edi, eax, 20h
push eax
invoke lstrcat, addr buffer, addr _retChar
invoke lstrcpy, addr buffer, edi
invoke lstrcat, addr buffer, addr _backSlash
pop eax
invoke lstrcat, addr buffer, eax
push eax
invoke lstrcat, addr buffer, addr _retChar
invoke lstrlen, addr buffer
mov SizeReadWrite, eax
invoke WriteFile, hReadWriteInput, addr buffer,SizeReadWrite, addr Nbr_Octet_Ecrit, 0
pop eax
;invoke MessageBox, 0, addr buffer, edi, 20h

;#######################################
;#######################################

.else
mov eax, esi
add eax, 2Ch
.if byte ptr [eax] != "."
mov edx, tailleChemin
mov byte ptr [edi+edx], "\"
mov byte ptr [edi+edx+1], 0
invoke lstrcat, edi, eax
invoke ScanRep, edi
mov ebx, tailleChemin
mov byte ptr [edi+ebx], 0
.endif
.endif
.endw
invoke FindClose, hFile
.endif
ret
ScanRep ENDP


mais le résultat est le même il manque toujours des fichiers

mardi 4 août 2009 à 11:37:09 | Re : Recherche de fichier recursif


Cette discussion est classée dans : mov, addr, invoke, eax, edi


Répondre à ce message

Sujets en rapport avec ce message

out bmp [ par vincent2795 ] Bonjour, dans ma source, j' essaye de faire un screenshot, et de le nommer pas la date et l' heure ou il es pris. mon problème: si le nom du fichier e Comment utiliser une variable ?! lorsque l'on utilise déjà ESI et EDI dans la PROC. [ par rebixav ] Voilà mon problème, je débute en assembleur et je l'utilise essentiellement pour créer des procédure pour visual basic ou C voici une de mes procédure Aligner des données pour le SSE [ par epineurien ] Bonjour à tous !J'ai un petit problème avec du code dont je mesure la vitesse: suivant la compilation, la vitesse varie du simple au double .J'expliqu Aidez moi à traduire une petite fonction assembleur en C (API Windows) [ par skirby ] Bonjour à tous, J'essaye désespérément de traduire une fonction ASM en C. Le but de cette fonction est de pouvoir utiliser une ressource compilé dans Une mémoire "read" [ par msteve ] Bonsoir, Je suis débutant et j'ai recopié un programme test. Je parviens à l'assembler, puis à créer un .exe ; quend je lance l'exe j'obtiens la boîte afficher une image jpeg avec la fonction StretchDIBits ? [ par mitch19 ] bonjour, j'essaye depuis quelques temps d'afficher une image jpeg avecla commande  StretchDIBits, en vain ! mon programme plante lamentablement !Si qu inverser une chaine [ par MrdJack ] salut, je suis sur un projet de calculatrice me permettant de faire des calculs avec des nombres tres grands. chaque nombre est stocké dans la memoire j'ai un prob avec mon buffer ; ya pas d'amuses gueules (masm32) [ par papiboff ] bj si je mets le buffer "somme " en dd avec charge eax et que j'ajoute deux 'dec ebx ' , ben , marche pas correctement ; (pêrqué ???? = en french) sv Petit problème pour comparer (cmp) [ par smok1360 ] Bonjour à tous,Pour commencer, j'espère de ne pas avoir choisis le mauvais lieu pour poster, j'ai un petit peu hésité Donc, j'ai décidé d'apprendre l' AT&T erreur de compilation etc... [ par maminovadu75 ] Bonjour, j'aimerais me mettre a l'assembleur mais j'ai quelque problème.voici mon code morceau de code pour trier un tableau de int : ( mélange de C/C


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,295 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales