Tatsächlichen Dateipfad berechnen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
WPö
Moderator
Beiträge: 669
Registriert: 27.05.2008 12:44
Wohnort: Oberland
Kontaktdaten:

Tatsächlichen Dateipfad berechnen

Beitrag von WPö »

Servus, Leute!

Heute stehe ich wohl wieder einmal auf der Leitung.
Ich brauche eine Funktion, die mir zu einem zusammengestückelten Pfad wie
D:\abc\def\..\ghi\Datei
den effektiven Pfad zurückgibt, also
D:\abc\ghi\Datei
Offensichtlich lese ich in der PB-Hilfe jedesmal über den richtigen Befehl drüber - oder gibt es ihn nicht? Deshalb auch im Anfänger-Bereich :oops: . Unter PHP ist es realpath().

Danke für die Antworten!

Gruß - WPö
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Tatsächlichen Dateipfad berechnen

Beitrag von Andesdaf »

eine in PureBasic integrierte Funktion gibts dafür nicht.

Um das zeuch zu verkürzen gibt's PathCompactPath.

Keine Ahnung, vielleicht gibt's noch einen weiteren Befehl.
Win11 x64 | PB 6.20
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Tatsächlichen Dateipfad berechnen

Beitrag von STARGÅTE »

wenns nur "das" ist sollte n Regulärer Ausdruck helfen:

Code: Alles auswählen

Global RealPathExpression = CreateRegularExpression(#PB_Any, "[^\\]+\\\.\.\\|\.\\")

Procedure.s RealPath(Path$)
  ProcedureReturn ReplaceRegularExpression(RealPathExpression, Path$, "")
EndProcedure

Debug RealPath("D:\abc\.\def\..\ghi\Datei")
Er sucht nach rücksprüngen "..\", oder gleichen Ebenen ".\"
und löscht diese, mit den unterebenen.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
WPö
Moderator
Beiträge: 669
Registriert: 27.05.2008 12:44
Wohnort: Oberland
Kontaktdaten:

Re: Tatsächlichen Dateipfad berechnen

Beitrag von WPö »

Danke Euch beiden!

Hab nochmal versucht, ohne Umwandlung solche Dateipfade an OpenFile und ReadFile zu übergeben und:
Du kriegst die Tür nicht zu!
Das funktioniert! :bounce:
Ist also unnötig, RealPath nachzuprogrammieren - zumindest in dem Umfang, den ich hier verwendet habe. Trotzdem speziell Dir, Stargate, nochmals ein heftiges Danke!

Wie bei diesen RegEx üblich, sieht das richtig schlimm aus.

Gruß - WPö
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
Little John

Re: Tatsächlichen Dateipfad berechnen

Beitrag von Little John »

WPo hat geschrieben:Unter PHP ist es realpath().
Ich denke GetFullPathName_() macht das gleiche:

Code: Alles auswählen

Procedure.s FullName (source.s)
   ; in: short or long file name
   Protected ret.s{#MAX_PATH}

   GetFullPathName_(@source, #MAX_PATH, @ret, #Null)
   ProcedureReturn ret
EndProcedure


;-- Demo
Debug FullName("C:\Windows\..")
Gruß, Little John
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Re: Tatsächlichen Dateipfad berechnen

Beitrag von #NULL »

STARGÅTE hat geschrieben:wenns nur "das" ist sollte n Regulärer Ausdruck helfen:

Code: Alles auswählen

Global RealPathExpression = CreateRegularExpression(#PB_Any, "[^\\]+\\\.\.\\|\.\\")

Procedure.s RealPath(Path$)
  ProcedureReturn ReplaceRegularExpression(RealPathExpression, Path$, "")
EndProcedure

Debug RealPath("D:\abc\.\def\..\ghi\Datei")
Er sucht nach rücksprüngen "..\", oder gleichen Ebenen ".\"
und löscht diese, mit den unterebenen.
klappt noch nicht ganz bei mehrfachen doppeldingens:

Code: Alles auswählen

Debug RealPath("D:\abc\.\def\..\..\ghi\Datei")
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Tatsächlichen Dateipfad berechnen

Beitrag von STARGÅTE »

jo, war auch nur auf die schnelle hin"geschmiert" ...

das Suchmuster muss noch präzisiert werden.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Re: Tatsächlichen Dateipfad berechnen

Beitrag von AND51 »

Falls möglich, das Arbeitsverzeichnis kurz auf den Pfad setzen und wieder zurücksetzen:

Code: Alles auswählen

Procedure.s GetRealPath(Path$)
   Protected currentDir.s=GetCurrentDirectory() ; aktuellen Pfad speichern
   SetCurrentDirectory(Path$)
   Protected realPath.s=GetCurrentDirectory()
   SetCurrentDirectory(currentDir) ; altes aktuellen Pfad wiederherstellen
   ProcedureReturn realPath
EndProcedure

Debug GetRealPath("C:\Windows\system32\..\..\Windows\") ; should debug "C:\Windows"
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Little John

Re: Tatsächlichen Dateipfad berechnen

Beitrag von Little John »

AND51 hat geschrieben:Falls möglich, das Arbeitsverzeichnis kurz auf den Pfad setzen und wieder zurücksetzen
Und warum so umständlich?
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

Re: Tatsächlichen Dateipfad berechnen

Beitrag von ts-soft »

Little John hat geschrieben:Und warum so umständlich?
Wie sollte man das aktuelle Arbeitsverzeichnis sonst sichern und wiederherstellen?
Antworten