suche Programm der ordner durch"listet"

Anfängerfragen zum Programmieren mit PureBasic.
ChrisBa
Beiträge: 50
Registriert: 22.07.2006 12:14

suche Programm der ordner durch"listet"

Beitrag 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:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
ChrisBa
Beiträge: 50
Registriert: 22.07.2006 12:14

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Haste nicht, aber das steht in den letzten beiden Zeilen. Beispiel ist in der Hilfe vorhanden.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
ChrisBa
Beiträge: 50
Registriert: 22.07.2006 12:14

Beitrag 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
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
ChrisBa
Beiträge: 50
Registriert: 22.07.2006 12:14

Beitrag von ChrisBa »

super
vielen dank
du hast mir echt weitergeholfen
Antworten