Seite 1 von 1

suche Programm der ordner durch"listet"

Verfasst: 02.08.2006 22:42
von ChrisBa
Hallo
Leider find ich derartiges nicht in der Hilfe und daher schreib ich hier mein problem.
Ich suche einen Code der folgendes macht:
Ein bestimmten Ordner,z.B: Eigene Dateien
ich möchte dann erfahren welche Unterordner es in "Eigenen Dateien" gibt.
und dann mit einem if-code das wenn es z.B ordner X gibt,er diesen löscht.
wie sieht dieser code aus?
hab schon lange dannach gesucht aber leider gefunden :cry:

Verfasst: 02.08.2006 22:58
von ts-soft
Eigene Dateien rausfinden ist auch nicht ganz so einfach :wink:

Code: Alles auswählen

Procedure.s GetSpecialFolderPath(CSIDL.l)
  Protected Path.s = Space(#MAX_PATH * SizeOf(Character))
  Protected Library = OpenLibrary(#PB_Any, "shell32.dll")
  If Library
    CompilerIf #PB_Compiler_Unicode
      CallFunctionFast(GetFunction(Library,"SHGetSpecialFolderPathW"), 0, @Path, CSIDL, 0)
    CompilerElse
      CallFunctionFast(GetFunction(Library,"SHGetSpecialFolderPathA"), 0, @Path, CSIDL, 0)
    CompilerEndIf
    CloseLibrary(Library)
  EndIf
  If Right(Path, 1) <> "\" : Path + "\" : EndIf
  ProcedureReturn Path
EndProcedure

Debug GetSpecialFolderPath(#CSIDL_PERSONAL)
Für ältere PB Versionen mal suchen!

Für den Rest in der Hilfe nochmals unter FileSystem, im speziellem: ExamineDirectory() ansehen und das Beispiel erarbeiten, ggfs. nochmal nachfragen oder besser suchen, wurde bereits mehrmals gefragt :wink:

Verfasst: 02.08.2006 23:30
von ChrisBa
oh,da hab ich mich vielleichtetwas undeutlich ausgedrückt
mit auflisten meinte ich soetwas.
der Order C:\Programme
und das Programm soll mir dann zeigen welche Ordner in C:\Programme sind

Verfasst: 02.08.2006 23:40
von ts-soft
Haste nicht, aber das steht in den letzten beiden Zeilen. Beispiel ist in der Hilfe vorhanden.

Verfasst: 02.08.2006 23:52
von ChrisBa
versteh leider den code nicht da wenn ich das programm ausführe nur der datenort von Eigene dateien zu sehen sind,nicht aber seine unterordner

Verfasst: 03.08.2006 00:02
von Kiffi
@ChrisBa:

Um eine Ordnerstruktur mit beliebiger Tiefe zu durchlaufen, musst Du eine
Prozedur programmieren, die sich mit veränderten Parametern selber
aufruft. Sowas nennt man dann Rekursion und ist nicht gerade, ähm,
anfängergeeignet. ;-)

Wie dem auch sei: Hier ein Link zu einem Code, der Dir ausgehend von
einem Startpfad alle darunterliegenden Ordner auflistet. Ich hoffe, dass er für
Dich nicht allzu kompliziert ist und Du mit den darin enthaltenen
Kommentaren was anfangen kannst:

http://www.purebasic.fr/german/viewtopic.php?t=7263

Grüße ... Kiffi

Verfasst: 03.08.2006 00:02
von ts-soft
Der Rest steht in der Hilfe, wie oben geschrieben :wink:

Code: Alles auswählen

Procedure.s GetSpecialFolderPath(CSIDL.l)
  Protected Path.s = Space(#MAX_PATH * SizeOf(Character))
  Protected Library = OpenLibrary(#PB_Any, "shell32.dll")
  If Library
    CompilerIf #PB_Compiler_Unicode
      CallFunctionFast(GetFunction(Library,"SHGetSpecialFolderPathW"), 0, @Path, CSIDL, 0)
    CompilerElse
      CallFunctionFast(GetFunction(Library,"SHGetSpecialFolderPathA"), 0, @Path, CSIDL, 0)
    CompilerEndIf
    CloseLibrary(Library)
  EndIf
  If Right(Path, 1) <> "\" : Path + "\" : EndIf
  ProcedureReturn Path
EndProcedure

Define.s Directory = GetSpecialFolderPath(#CSIDL_PERSONAL)
If ExamineDirectory(0, Directory, "*.*")  
  While NextDirectoryEntry(0)
    If DirectoryEntryType(0) = #PB_DirectoryEntry_Directory
      If DirectoryEntryName(0) <> "." And DirectoryEntryName(0) <> ".."
        Debug DirectoryEntryName(0)
      EndIf
    EndIf
  Wend
  FinishDirectory(0)
EndIf
Listet im Debbuger alle Ordner von "Eigene Dateien" auf
Kannst Directory auch auf "C:" ändern, dann brauchste die obere Procedure nicht, steht aber fast 1:1 in der Hilfe, das Beispiel

Verfasst: 03.08.2006 00:08
von ChrisBa
super
vielen dank
du hast mir echt weitergeholfen