Seite 1 von 1

Ordnerstuktur abspeichern

Verfasst: 10.12.2012 14:18
von Sauer-RAM
Hi,
ich will ein Programm schreiben, welches die gesamte Ordnerstruktur inklusive Unterordner in einer Datei abspeichert. Leider komme ich momentan nicht weiter. Hier ist mal der code den ich schon habe:

Code: Alles auswählen

MainDirectory.s = "C:\Users\Benutzer\Desktop\Test\"
Directory.s = MainDirectory

If OpenFile(1,"D:\directtest.txt")
Else
  MessageRequester("Error","kann datei nicht erstellen")
  End
EndIf

name.s = ""

Start:
SetCurrentDirectory(Directory)
If ExamineDirectory(0,Directory,".")
  While NextDirectoryEntry(0)
    If DirectoryEntryType(0) = #PB_DirectoryEntry_Directory
      If FindString(Name, " " + DirectoryEntryName(0) + " ") > 0
        Goto Start
      EndIf
      WriteStringN(1,DirectoryEntryName(0) + " Dir")
      name.s = name + " " + DirectoryEntryName(0) + " "
      Directory = DirectoryEntryName(0)
      FinishDirectory(0)
      Goto Start
    ElseIf DirectoryEntryType(0) = #PB_DirectoryEntry_File
      If FindString(Name, " " + DirectoryEntryName(0) + " ") > 0
        Goto Start
      EndIf
      name.s = name + " " + DirectoryEntryName(0) + " "
      WriteStringN(1,DirectoryEntryName(0) + " File")
    EndIf
  Wend
  If Directory = MainDirectory
    End
  Else
    Directory = GetPathPart(DirectoryEntryName(0))
    Goto Start
  EndIf
EndIf


Ich hoffe mir kann jemand helfen. Ich habe schon ein Post gesehen der auch in die Richtung geht, dort war aber leider kein Code.

Vielen Dank schonmal für die Antworten.

Re: Ordnerstuktur abspeichern

Verfasst: 10.12.2012 14:34
von STARGÅTE
Der Code kann nicht funktionieren.
Du nimmst bei ExamineDirectory() immer die gleiche Nummer (0) und wenn du nun in einen Unterordner gehst (was mit Goto sowieso fragwürdig ist) dann startest du wieder das auslesen mit der gleichen Nummer. Somit geht das Auslesen des übergeordneten Ordners verloren.

Tips:
Erstelle eine vernünftige Prozedur, mit der du einen Ordner durchgehen kannst und rufe diese Prozedur rekursiv auf, wenn du in einen Unterordner gehst.
Verwende dabei immer #PB_Any für ExamineDirectory damit der Fortschritt in der jeweiligen Tiefe nicht verloren geht.
Wenn du eine Prozedur schreibst, sparst du dir auch das Goto.
Als Parameter kannst du deiner Prozedur immer gleich den richtigen Pfad geben, dann sparst du dir auch das SetCurrentDirectory usw.
Ansonsten kannst du auch hier im Forum danach suchen, es wurde oft gepostet wie man rekursiv eine Ordnerstruktur ließt.

Re: Ordnerstuktur abspeichern

Verfasst: 10.12.2012 14:59
von Sauer-RAM
Danke für die schnelle Antwort. Ich habe nicht nach rekursivem Ordnerstrukturscan gesucht, sondern nach Ordnerstruktur abspeichern, wo man nur einen Post findet. Ja das mit Goto war eher so eine Notlösung um zu sehen ob das Grundgerüst überhaupt läuft. Und mit Hab vergessen nach dem Goto FinishDirectory aufzurufen... ^^. Danke für den Tipp, jetzt weiß ich wonach ich in der Boardsuche suchen muss.

Re: Ordnerstuktur abspeichern

Verfasst: 10.12.2012 20:10
von kunstlust
Ich würde einfach mal die CMD befragen:

Code: Alles auswählen

If OpenFile(1,"c:\temp\directtest.txt")
Else
  Debug("Kann Datei nicht erstellen")
  End
EndIf
dir =  RunProgram("cmd.exe", "/c dir /AD/o/b/s "+GetHomeDirectory(),"", #PB_Program_Open | #PB_Program_Read|#PB_Program_Hide )
If dir
  While ProgramRunning(dir)
    WriteStringN(1,ReadProgramString(dir))
    Debug ReadProgramString(dir)
  Wend
EndIf
CloseFile(1)