Dateisuche
-
Also ich will mir grad in Assember eine Dateisuche programmieren, dabei soll eigentlich erstmal einfach alle Dateinamen & Dateigröße die sich in einem Verzeichnis befinden in eine Variabele gespeichert werden und dann auf den Bildschrim. Aber mangels Information und keiner konkreten Beispiele weiß ich nicht genau wie es geht.
Also ich weiß das es eine Interrupt Funktion des int21 FindFirstFile und FindNextFile gibt, der die Dateiname, Dateisize (Attribute etc.) ins PSP schreibt. Dabei beginnt das alles ab 80h und die ersten 21 Byte sind reserviert und dannach kommt das ganze was ich brauch. Doch wie greife ich darauf zu und wie bring ich das in eine Variabele? Beispiel wär nicht schlecht, sonst check ichs nicht!
-
Hi.
Original erstellt von <FREAK>:**
Doch wie greife ich darauf zu und wie bring ich das in eine Variabele?**Angesichts der Tatsache, dass in jedem 3.klassigen Tutorial erklaehrt wird, wie auf Daten im Speicher zugegriffen werden kann, verstehe ich deine Frage nicht ganz.
Daher interpretiere ich deine Text einfach mal folgendermassen:
Du weisst nicht, wie die Struktur der Daten von FindFirst und FindNext in der DTA aussieht.
Du weisst nicht, wie Du die Addresse der DTA in Erfahrung bringen kannst.=>
zu 1:
Ralph Browns Interrupt Liste hilft weiter
zu 2:
Bei der Gleiche Addresse gibts auch was zur DTA.Und zum Abschluss noch ein Beispiel:
;Uninitialisierte Daten... MyDTAOffs dw ? MyDTASeg dw ? ;... ;initialisierte Daten... FileName db "*.*",00h ;ASCIIz: *.* => Alle Dateien ;... ;Code... ;Addresse der DTA holen... mov ah,2Fh int 21h mov [MyDTAOffs],bx mov [MyDTASeg],es mov ah,4Eh ;FindFirst mov dx,offset FileName ;ASCIIz-String auf Dateiname/Pfad mov cx,0000h ;Alle Datei-Attribute zulassen! int 21h ;Wenn CF gesetzt Fehler! ;Sonst DTA gefuellt. ;Dateinamen anzeigen... mov bx,[MyDTAOffs] add bx,001Eh ;Wie den Seiten weiter oben zu entnehmen war, ;liegt der Name der ersten gefundenen Datei bei DTA+1Eh in form eines ;ASCIIz-Strings. ;...Wie Du das auf den Bildschirm bringst sei dir ueberlassen... ;Groesse der Datei anzeigen... mov bx,[MyDTAOffs] ;die Dateigroesse liegt bei DTA+1Ah mov eax,[bx+1Ah] ;usw, etc.