Seite 2 von 4

Re: Ordnerinhalt inkl Unterordner in eine Text Datei speiche

Verfasst: 27.12.2016 00:00
von ts-soft
Mit Threads hab ich kaum Plan da bräucht ich Hilfe.
Tut mit leid, aber Code ohne EnableExplicit rühre ich nicht an <)

Bei Deinem Progress wirste auch ein Problem bekommen, weil Du kennst den FileSize (100%) der rekursiven Dateien erst
nachdem Du diese ermittelt hast, also zu spät für regulären Progress.

PS: Ich würde die Ergebnisse des rekursiven Ermittelns in eine LinkListe zwischenspeichern, statt in einer Textdatei zu verknüpfen,
aber vielleicht sehe ich den Zweck Deines Programmes auch nicht so richtig.

Wenig hilfreich, aber trotzdem "Frohe Feiertage"
Thomas

Re: Ordnerinhalt inkl Unterordner in eine Text Datei speiche

Verfasst: 27.12.2016 00:17
von udg
Diese progressbar ist nicht wichtig und natürlich hast du recht. Ich kenne den Inhalt eines Ordners vorher nicht. Man müsste also vorher die Dateien zählen.
Lass ich weg.

Der Sinn des tool ist einfach nur:
Starten, Ordner wählen, dessen Inhalt wird mit kompletter Pfad Angabe in eine Text Datei gespeichert.
Fertig. Über Sinn und Unsinn müssen wir dabei nicht reden. Der eine brauchts der andere nicht.

Zu enable explicit :
Das versuche ich jedes mal einzutragen. Und jedes mal funktioniert das bei mir nicht. Ich definiere alles was EE von mir verlangt. Deklariere, und dann bekomme ich trotzdem die Meldung. Ich soll doch bitte mal deklarieren
Ab diesem Punkt klammer ich dann immer EE aus. Warum ich nichts deklariert und definiert bekomme, kein Plan.

Da muss ich noch schauen.

Re: Ordnerinhalt inkl Unterordner in eine Text Datei speiche

Verfasst: 27.12.2016 01:03
von ts-soft
EnableExplicit ist eigentlich ganz einfach:

Code: Alles auswählen

EnableExplicit

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #Button_Start
  #String_Path
  #Button_Ordner
  #CheckBox_srt
  #CheckBox_jpg
  #CheckBox_bmp
  #CheckBox_mp3
  #LineTopEdFrame
  #LineLeftEdFrame
  #LineRightEdFrame
  #LineBottomEdFrame
  #Gadget_LineLeftEdFrame
  #Gadget_LineRightEdFrame
  #Gadget_LineBottomEdFrame
  #Gadget_LineTopEdFrame
  #Frame_Text
  #Frame3D
  #CheckBox_Custom
  #String_Custom
  #Inhalt_txt
  #Container_CheckboxenUSW
  #Header
  #Exit_btn
  #Gadget_exit
  #CheckBox_srt_Text
  #CheckBox_jpg_Text
  #CheckBox_bmp_Text
  #CheckBox_mp3_Text
  #Img_Fat_Line
  #Fat_Line
  #Triangle
  #Gadget_Triangle
  #Img_Footer
  #Footer
  #Triangle_Button
  #Gadget_Triangle_Button
  #LineTop
  #LineLeft
  #LineRight
  #LineBottom
  #Gadget_LineTop
  #Gadget_LineLeft
  #Gadget_LineRight
  #Gadget_LineBottom
EndEnumeration

Global Path$
Global File2$
Define.l Event, EventWindow, EventGadget, EventType, EventMenu

;TEXT VERTICAL ALIGN IN EINGABEFELD
Procedure StringGadgetVCenter(GadgetID)
   Protected hwndEdit = GadgetID(GadgetID)
   Protected LineCount = SendMessage_(hwndEdit,#EM_GETLINECOUNT, 0, 0)
   Protected hdc = GetDC_(hwndEdit)
   Protected fsz.SIZE
   Protected eRect.RECT
   
   SelectObject_(hdc,GetGadgetFont(GadgetID))
   GetTextExtentPoint32_(hdc,"ABC",3,fsz.SIZE)
   ReleaseDC_(hwndEdit,hdc)   
   
   GetClientRect_(hwndEdit,eRect.RECT)
   eRect\top = (GadgetHeight(GadgetID) - fsz\cy * LineCount) / 2
   eRect\bottom = eRect\top + (fsz\cy * LineCount) + 4
   
   If eRect\bottom < GadgetHeight(GadgetID)
      SendMessage_(hwndEdit,#EM_SETRECT,0,eRect)
   EndIf
EndProcedure

Procedure Examine(Directory$)
  Protected Any=ExamineDirectory(#PB_Any, Directory$, "*.*")
  Protected NewDir$, File$
  
  If Any
    While NextDirectoryEntry(Any)
      If DirectoryEntryType(Any) = #PB_DirectoryEntry_Directory
        NewDir$=DirectoryEntryName(Any)
        If NewDir$ <> "." And NewDir$ <> ".."
          Examine(Directory$+NewDir$+"\")
        EndIf
      Else
        File$=Directory$+DirectoryEntryName(Any)
;         If FileSize(File$)=0
;           Hash=1
;         
;           
;         EndIf
        File2$+File$+" "+#CRLF$
      EndIf
    Wend
    FinishDirectory(Any)
  EndIf
EndProcedure

; usw.
Wie Dein Code im endeffekt aussieht, sollte mir ja egal sein, aber sobald ich den Code abändere, muß ich auf EnableExplicit
bei meinen Variablen verzichten, bzw. bei Deine Hinfügen, ansonsten ist mir das zu Fehlerträchtig. Außerdem sieht man,
wenn es den Ordentlich gemacht wird, gleich den Scope der Variablen, ansonsten müßte man erst den Ganzen Code bis vorne
durchsehen, was bei Fremdcode nicht so viel Spaß macht :mrgreen:

Die Arbeit mache ich mir aber nicht mehr.

PS: Compiler / Syntax-Uberprüfung gibt doch alle Variablen aus, wenn Du eine vergessen haben solltest!

Re: Ordnerinhalt inkl Unterordner in eine Text Datei speiche

Verfasst: 27.12.2016 03:10
von udg
ts-soft hat geschrieben:EnableExplicit ist eigentlich ganz einfach:
... ansonsten müßte man erst den Ganzen Code bis vorne
durchsehen, was bei Fremdcode nicht so viel Spaß macht :mrgreen:
Die Arbeit mache ich mir aber nicht mehr.
PS: Compiler / Syntax-Uberprüfung gibt doch alle Variablen aus, wenn Du eine vergessen haben solltest!
EnableExplicit hab ich nun hinzugefügt.

Noch 1 Wehwechen:

wo ich noch einen Programmabsturz habe, wenn ich keinen Ordner zum auslesen mit dem zugehörigen Button aussuche und gleich auf den Button "Start" drücke, öffnet es den SaveFileRequester, ich drück "ok" und dann stürzt das Programm ab.

Wie kann ich das verhindern, dass ich hier zb eine Meldung einblende in einem Gadget:
"Bitte zuerst einen Ordner zum auslesen wählen" falls einer gleich den Start button drückt?

:?

Grüße

Re: Ordnerinhalt inkl Unterordner in eine Text Datei speiche

Verfasst: 27.12.2016 11:20
von NicTheQuick
Du kannst den Start-Button auch mit DisableGadget erstmal deaktivieren und aktivieren, wenn ein Ordner ausgewählt wurde.

Re: Ordnerinhalt inkl Unterordner in eine Text Datei speiche

Verfasst: 27.12.2016 12:02
von udg
Danke, einfache und beste Idee. So mach ich es.

Edit
kann ich so leider nicht machen. DisableGadget verhunzt mir in diesem Fall das Design des Buttons.
Muss ich mir noch was einfallen lassen.

Re: Ordnerinhalt inkl Unterordner in eine Text Datei speiche

Verfasst: 27.12.2016 12:37
von Micha122
Du möchtest die Tipps zu Eventschleife und Threaded offensichtlich nicht umsetzen. >_<
Benutze einfach mal ein Verzeichnis mit wirklich vielen Dateien.......Fenster wird nicht mehr neu gezeichnet......Fenster reagiert nicht mehr. :allright:

Thema ist ja eigentlich: Ordnerinhalt inkl Unterordner in eine Text Datei speichern

Die Funktion Examine(Directory$) bezieht aber (vorausgesetzt ich habe deinen Code richtig gelesen) gar keine Unterverzeichnisse mit ein. :oops:


Grüße, Micha

Re: Ordnerinhalt inkl Unterordner in eine Text Datei speiche

Verfasst: 27.12.2016 14:34
von man-in-black
Die Funktion Examine(Directory$) bezieht aber (vorausgesetzt ich habe deinen Code richtig gelesen) gar keine Unterverzeichnisse mit ein.
falsch gelesen ;) Examine ruft sich selbst nochmal auf, wenn ein Ordner gefunden wurde. Ordner>Unterordner>Unterordner>... .
Das schöne an der Rekursion ist ja gerade, dass man durch diesen Trick des Selbstaufrufens unendlich tief gehen kann.

MFG
MIB

Re: Ordnerinhalt inkl Unterordner in eine Text Datei speiche

Verfasst: 27.12.2016 14:52
von Micha122
Ja, stimmt. Ich habe die Funktion Standalone getestet und den Backslash am ende von directory$ vergessen. :oops:

Funktioniert :allright:

Code: Alles auswählen

Procedure Examine(Directory$)
  Define.i Any, NewDir$, File$
  
  Any=ExamineDirectory(#PB_Any, Directory$, "*.*") 
  If Any 
    While NextDirectoryEntry(Any)
      If DirectoryEntryType(Any) = #PB_DirectoryEntry_Directory
        NewDir$=DirectoryEntryName(Any)
        If NewDir$ <> "." And NewDir$ <> ".."
          Examine(Directory$+NewDir$+"\")
        EndIf 
      Else
        File$=Directory$+DirectoryEntryName(Any)
;         If FileSize(File$)=0
;           Hash=1
;         
;           
;         EndIf
        File2$+File$+" "+#CRLF$
      EndIf
    Wend
    FinishDirectory(Any)
  EndIf
  Debug File2$
EndProcedure


Examine("C:\Users\Micha\Desktop\")

Den Fehler in meiner eigenen Rekursion habe ich nun auch endlich gefunden. Ein falsches behandeln der Pseudo Verzeichnisse.

Grüße

Re: Ordnerinhalt inkl Unterordner in eine Text Datei speiche

Verfasst: 27.12.2016 18:53
von Sicro
man-in-black hat geschrieben:
Das schöne an der Rekursion ist ja gerade, dass man durch diesen Trick des Selbstaufrufens unendlich tief gehen kann.
Zumindest bis der Stack voll gelaufen ist.
Ich bin mir nicht sicher, ob das bereits bei der maximalen Verzeichnistiefe passieren kann...

Müsste man mal ausprobieren, ob Endrekursion bei PB auch funktioniert:
https://www.heise.de/developer/artikel/ ... kelseite=4