Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi C: = C:\Windows\System32 (https://www.delphipraxis.net/129147-c-%3D-c-%5Cwindows%5Csystem32.html)

Dezipaitor 13. Feb 2009 13:49

Re: C: = C:\Windows\System32
 
Auweia.

Das habe ich auch gerade rausgefunden. Warum das allerdings nicht dokumentiert wurde?

Also nochmal zum mitlesen:

+Delphi in E:\Delphi startet
++TestProgramm in P:\Test

GetFullPathName mit "C:" liefert: "C:\"
GetFullPathName mit "P:" liefert: "P:\Test"
GetFullPathName mit "E:" liefert: "E:\Delphi"

Wer Delphi gestartet hat ist dabei irrelevant. Es wird nur der ein Parent verwendet.

Bei Eingabe von "X:" liefert die Funktion dann das aktuelle Verzeichnis, wenn X: auch der Laufwerksbuchstabe des aktuellen Verzeichnisses des Prozesses oder dessen Elternprozess ist.

himitsu 13. Feb 2009 13:55

Re: C: = C:\Windows\System32
 
OK, dann halt ganz einfach:
Delphi-Quellcode:
begin
  WriteLn('Input:                           "C:"');
  WriteLn('SysUtils.ExpandFileName :       ', SysUtils.ExpandFileName('C:'));
  WriteLn('WideString ExpandFileName:       ', ExpandFileName('C:'));
  WriteLn('AnsiString ExpandFileName:       ', ExpandFileNameA('C:'));
  WriteLn('Fixed Buffer Size ExpandFileName: ', ExpandFileName3('C:'));

  WriteLn;
  WriteLn('SetCurrentDirectory to "C:\Programme\"');
  SetCurrentDirectory('C:\Programme\');

  WriteLn;
  WriteLn('Input:                           "C:"');
  WriteLn('SysUtils.ExpandFileName :       ', SysUtils.ExpandFileName('C:'));
  WriteLn('WideString ExpandFileName:       ', ExpandFileName('C:'));
  WriteLn('AnsiString ExpandFileName:       ', ExpandFileNameA('C:'));
  WriteLn('Fixed Buffer Size ExpandFileName: ', ExpandFileName3('C:'));
  ReadLn;
end.
[edit]
ach mensch, wo kommt denn das alles jetzt her o.O

nja, wie gesagt, das ist schon seit DOS-Zeiten so, aber warum es nicht dokumentiert ist ... k.A. ... sowas hat man wohl einfach zu wissen.

PS: "C:" ist sozusagen ein relativer Pfadbezeichner ... hier allerdings auf das Laufwerk bezogen und du weißt ja bestimmt selber, wie vorsichtig man mit relativen Pfaden in seinem Programm sein soll. :zwinker:

PSS: der OpenDialog ändert auch öfters mal das aktuelle Verzeichnis ... drum hatte ich den vorhin erwähnt ... hattest du dein Programm wärend des öffnen des Dialogs laufen lassen, oder danach nochmal neu gestartet?
Bei Letzerem könnte Delphi ja nochmal dazwischengehn und den Pfad erneut setzen.

Dezipaitor 13. Feb 2009 14:36

Re: C: = C:\Windows\System32
 
Ja, vielen Dank für den ganzen Aufwand. :dp: Ich werde darüber einen Artikel verfassen. :wall:

Dezipaitor 13. Feb 2009 15:14

Re: C: = C:\Windows\System32
 
Es geht noch weiter.
Für jedes einzelne Laufwerk, auf dem man SetCurrentDirectory verwendet,
merkt sich dies Windows und leitet "x:" dann auf den dort eingestellte Pfad.

nahpets 13. Feb 2009 15:22

Re: C: = C:\Windows\System32
 
Hallo,
Zitat:

Zitat von Dezipaitor
Es geht noch weiter.
Für jedes einzelne Laufwerk, auf dem man SetCurrentDirectory verwendet,
merkt sich dies Windows und leitet "x:" dann auf den dort eingestellte Pfad.

ja, genau wie unter DOS.
x: ist quasi der Platzhalter für das gerade "zufällig" auf dem entsprechenden Laufwerk aktuelle Verzeichnis.
So kannst Du zwischen z. B.
  • C:\Windows\System32\
  • D:\Delphi
  • E:\Datenbanken
  • ...
halt kurz und knapp mit e: d: c: e:... wechseln, ohne die kompletten Pfade anzugeben. Ist halt deutlich kürzer als mit entsprechenden cd's und Pfadangaben, ist aber auch deutlich unübersichtlicher, da Du beim Programmstart eigentlich keinen definierten Zustand hast.

nicodex 13. Feb 2009 15:35

Re: C: = C:\Windows\System32
 
Die aktuellen (bzw. Arbeits-)Verzeichnisse der jeweiligen Laufwerke stehen sogar in (versteckten) Umgebungsvariablen:
Delphi-Quellcode:
WriteLn(GetEnvironmentVariable('=C:'));
WriteLn(GetEnvironmentVariable('=D:'));


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz