Ordner anlegen

Anfängerfragen zum Programmieren mit PureBasic.
zimmi
Beiträge: 2
Registriert: 23.02.2005 23:07

Ordner anlegen

Beitrag von zimmi »

Hallo,

ich benötige Hilfe bei folgendem Code:

Code: Alles auswählen

Zielordner$ = "C:\Dokumente und Einstellungen\Markus\" + FormatDate("%yyyy%mm%dd", Date())
InitialPath$="C:\"
Path$ = PathRequester("Bitte wählen Sie einen Pfad aus", InitialPath$) 
If Path$ 
  MessageRequester("Information", "Sie haben folgenden Pfad ausgewählt:"+Chr(10)+Path$, 0)
  Ergebnis = CopyDirectory(Path$, Zielordner$,"", #PB_FileSystem_Recursive)
Else 
  MessageRequester("Information", "Der Requester wurde abgebrochen.", 0) 
EndIf 
Probleme habe ich mit der ersten Zeile: Zielordner$.
So, wie die Zeile jetzt angegeben ist, wird der Ordner (in diesem Fall Tagesdatum) angelegt.
Wenn ich jetzt aber die Zeile mit OE_BACKUP erweitere (also: Zielordner$ = "C:\Dokumente und Einstellungen\Markus\OE_BACKUP" + FormatDate("%yyyy%mm%dd", Date()) ), dann wird kein Ordner angelegt.

Ich weiß nicht warum. Ich finde die Gesetzmäßigkeit einfach nicht.

Kann mir bitte jemand auf die Srünge helfen?

Vielen Dank.

Gruß.
Markus

Edit by NicTheQuick: Code-Tags gesetzt
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von NicTheQuick »

Das ist tatsächlich ein merkwürdiger Fehler. Wahrscheinlich sogar ein Bug in PB.

Aber versuch mal nach dem Ordnernamen noch einen Backslash zu schreiben, also: [c]Zielordner$ = "C:\Dokumente und Einstellungen\Markus\OE_BACKUP" + FormatDate("%yyyy%mm%dd", Date()) + "\"[/c]

Ich habe es aber nicht ausprobiert.
Bild
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Hui, das gibt eine nette endlosschleife wenn man als Ziel und Quelle den selben Ordner aussucht und dieser noch Unterordner hat. :mrgreen:
zimmi
Beiträge: 2
Registriert: 23.02.2005 23:07

Ordner anlegen

Beitrag von zimmi »

Hallo,

danke für die schnelle Antwort.

So wird der Ordner schon angelegt. Musste aber festellen, dass ich in meinem Beitrag das Problem nicht richtig beschrieben habe:

Ich möchte, dass der Ordner ....\OE_BACKUP\ + Tagesdatum angelegt wird.

Wenn ich nach OE_Backup den Backslash weglasse, dann wird der Ordner angelegt. Setze ich nach dem OE_BACKUP aber einen Backslash, dann wird der Odner nicht angelegt.

Muss also irgendwie am Backslash liegen. Aber, warum? Und, wie kann ich das Problem umgehen?

Jedesmal, wenn ich das Programm aufrufe, soll im Verzeichnis ....\OE_BACKUP ein Unterordner als Tagesdatum angelegt werden.


Sorry, für meine erste, schlechte Ausführung. Ich hoffe, jetzt habe ich mein Problem besser erklären können.

Grüße.
Markus
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von NicTheQuick »

Existiert der Ordner OE_BACKUP schon oder erwartest du, dass er erstellt wird? Wenn der Ordner schon existieren sollte, weiß ich nicht, wo das Problem liegt. Im anderen Fall glaube ich, dass der Kopierbefehl höchstens einen nicht-existierenden Ordner anlegt, aber nicht zwei miteinander verschachtelte.
Wenn du verstehst, was ich meine.

Du müsstest also dann schon vorher prüfen, ob der Ordner OE_BACKUP existiert. Wenn nicht, musst du ihn anlegen. Und erst dann kannst du mit dem Kopieren beginnen.

Sorry, für die vielen Ideen, aber ich bin gerade zu faul um das selbst auszutesten. :freak:
Bild
Team100
Beiträge: 104
Registriert: 13.09.2004 22:59

Beitrag von Team100 »

@zimmi

Ich hatte das Problem schon mal. Sowohl das CopyDirectory als auch
das verwandte CreateDirectory können immer nur <ein> neues
Diectory anlegen (egal ob mit Backslash oder nicht - besser man schreibt ihn dazu).

Wenn du also .... markus\OE_BACKUP20050223\ als Ausdruck hast,
dann wird es angelegt, weil ...\markus\ schon existiert.
.... markus\OE_BACKUP\20050223\ wird nicht angelegt, da der Befehl
2 Unterverzeichnisse anlegen müßte und das tut er nicht.

Abhilfe: Jedes Unterverzeichnis einzeln vorab mit CreateDirectory() anlegen.

(Das sollte in der Hilfe nachgebessert werden oder der Befehl sollte fürs
Anlegen von mehreren Directorys verbessert werden)

Cu von Team100
Kompliziert kann es jeder lösen, aber das wirklich Geniale ist einfach.....
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 »

Um mehrere Verzeichnisse in einem Rutsch zu erstellen gibts in Win2k und höher ne API-Funktione: MakeSureDirectoryPathExists ,
Außerdem kann man noch folgenden Funktion von IB-Software nutzen:

Code: Alles auswählen

Procedure ForceDirectories(Directory.s)
  If Len(Directory) > 0
    If (Right(Directory, 1) = "\")
      Directory = Left(Directory, Len(Directory) -1)
    EndIf
    If (Len(Directory) < 3) Or FileSize(Directory) = -2 Or GetPathPart(Directory) = Directory
      ProcedureReturn #False
    EndIf
    ForceDirectories(GetPathPart(Directory))
    CreateDirectory(Directory)
    ProcedureReturn #True
  EndIf
EndProcedure
[Edit]Nachtrag: hier der link zum Original Thread: http://robsite.de/php/pureboard-archiv/ ... irectories[/Edit][
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
Antworten