AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

C: = C:\Windows\System32

Ein Thema von Dezipaitor · begonnen am 13. Feb 2009 · letzter Beitrag vom 13. Feb 2009
Antwort Antwort
Seite 2 von 2     12   
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#11

Re: C: = C:\Windows\System32

  Alt 13. Feb 2009, 14:49
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.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.051 Beiträge
 
Delphi 12 Athens
 
#12

Re: C: = C:\Windows\System32

  Alt 13. Feb 2009, 14:55
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.

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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#13

Re: C: = C:\Windows\System32

  Alt 13. Feb 2009, 15:36
Ja, vielen Dank für den ganzen Aufwand. Ich werde darüber einen Artikel verfassen.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#14

Re: C: = C:\Windows\System32

  Alt 13. Feb 2009, 16:14
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.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#15

Re: C: = C:\Windows\System32

  Alt 13. Feb 2009, 16:22
Hallo,
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.
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#16

Re: C: = C:\Windows\System32

  Alt 13. Feb 2009, 16:35
Die aktuellen (bzw. Arbeits-)Verzeichnisse der jeweiligen Laufwerke stehen sogar in (versteckten) Umgebungsvariablen:
Delphi-Quellcode:
WriteLn(GetEnvironmentVariable('=C:'));
WriteLn(GetEnvironmentVariable('=D:'));
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz