Seite 1 von 2

Parentfolder eines Ordners

Verfasst: 26.03.2007 09:15
von Panik
Hallo !

Ich möchte einen Ordner umbenennen, von dem ich in einem String mit Namen zielordner$ diesen Ausdruck habe:
C:\Bilder\Mustermann\verzeichnis1\

Im Programm ergibt sich ein String bilderordner$ mit Inhalt: Urlaubsbilder_2007

Ergebnis des Umbenennens soll praktisch sein:
C:\Bilder\Mustermann\Urlaubsbilder_2007\

Mein probeweiser Erfolg war nachdem ich

Code: Alles auswählen

RenameFile(zielpfad$, bilderordner$)
eingab, daß mir der Ordner zwar umbenannt, aber auch verschoben (dahin, wo das Programm selbst ist ) wurde :shock:

Leider habe ich in der deutschen und englischen Pureboardsuche keinen Hinweis bekommen, wie ich das übergeordnete Verzeichnis eines Ordners erhalte und in einem String hinterlege.
Dann könnte ich es so testen

Code: Alles auswählen

RenameFile(zielpfad$, parentfolder$ + bilderordner$) 
Gibt es einen Tip ?

Re: Parentfolder eines Ordners

Verfasst: 26.03.2007 09:43
von Kiffi
Panik hat geschrieben:Gibt es einen Tip ?
einfache Stringoperationen machen es möglich:

Code: Alles auswählen

Procedure.s GetParentFolder(Folder.s)
  Protected Counter.l
  Protected ParentFolder.s
  If Right(Folder,1)<> ""
    Folder + ""
  EndIf
  For Counter = 1 To CountString(Folder, "") - 1
    ParentFolder + StringField(Folder, Counter, "") + ""
  Next  
  ProcedureReturn ParentFolder
EndProcedure
Grüße ... Kiffi

Verfasst: 26.03.2007 14:49
von AND51
Warum gehts denn nicht auch so:

Das Parentfolder von C:\Bilder\Mustermann\ ist
C:\Bilder\Mustermann\..\

:wink:

Verfasst: 26.03.2007 15:11
von Kiffi
AND51 hat geschrieben:Warum gehts denn nicht auch so:
klar geht das auch so. Allerdings könnten dann bei weiterer Verarbeitung des
Ordnernamens leicht Konstrukte solcher Art entstehen:

C:\Programme\PureBasic\..\..\Programme\PureBasic\..\PureBasic\Compilers\..\..\PureBasic\..\..\

Grüße ... Kiffi

Verfasst: 26.03.2007 15:32
von AND51
Ja, das stimmt, da muss man dann schon sauber programmieren.

Habe hier eine Prozedur, die ca. 4x schneller ist als deine:

Code: Alles auswählen

Procedure.s myGetParentFolder(Folder.s)
	If Right(Folder, 1) <> "\"
		Folder+"\"
	EndIf
	Protected *pos.Character=@Folder+MemoryStringLength(@Folder)-SizeOf(Character)*2
	While Not *pos = @Folder
		If *pos\c = 92 ; 92 is a backslash
			Break
		EndIf
		*pos-SizeOf(Character)
	Wend
	ProcedureReturn PeekS(@Folder, *pos-@Folder+SizeOf(Character))
EndProcedure
Frage: Ist 92 auch der Wert eines BackSlashes, wenn man Unicode benutzt?

Verfasst: 26.03.2007 15:34
von Panik
Hallo !

Kiffi hat recht, und seine Lösung ist gut+funktioniert.

Der besagte Pfad wird vorher außerdem über einen Auswahldialog ermittelt ( z.B. auch D:\Fotosammlung\Oma\Neuer Ordner)
Im Laufe des Programms ergeben sich dynamisch durch Nutzereingaben einige Inhalte, aus deren Kombination der Nutzer am Ende mehrere Vorschläge bekommt, wie der eben mit Daten gefüllte Ordner nun umbenannt wird.
( D:\Fotosammlung\Oma\Oma_Hilde_Besuch_Oktober_2006 )
Daher klappt der 1. etwas unflexible Vorschlag von AND51 nicht .

Danke Euch , besonders Kiffi !

Nachtrag zum 2. Vorschlag von AND51 :
Ok - jetzt danke ich euch beiden besonders ! :wink:

Panik

Verfasst: 26.03.2007 15:37
von AND51
Stimmt, das mit ".." eigenet sich wohl eher doch nur für Skripte wie PHP, Perl und JavaScript und auch HTML, wo die Pfade immer gleich bleiben; nicht jedoch für Hochprogrammiersprachen wir PB.
Es sei denn, man läd beispielsweise Images, die immer ein Verzeichnis höher liegen als die EXE oder so.

Verfasst: 26.03.2007 15:38
von Kiffi
AND51 hat geschrieben:Habe hier eine Prozedur, die ca. 4x schneller ist als deine:
ja, schön.

@Panik: Görn g'schehn!

Grüße ... Kiffi

Verfasst: 26.03.2007 15:50
von AND51
Wo ist das Smiley bei deinem "schön"...?

Ach ja: und was ist mit meienr Frage? Weißt du was nähres dazu?

Verfasst: 26.03.2007 16:00
von Kiffi
AND51 hat geschrieben:Wo ist das Smiley bei deinem "schön"...?
wieso? Muss ich da eins rein? Im Zweifelsfall nimmste das große auf der
linken Seite.
AND51 hat geschrieben:Ach ja: und was ist mit meienr Frage? Weißt du was nähres dazu?
nope.

Grüße ... Kiffi