Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Also so ähnlich wie
Delphi-Quellcode:
.
GetFullPathName()
Das funktioniert gut mit
Delphi-Quellcode:
-> "C:\Windows\System32"
GetFullPathName(".")
liefert aber für
Delphi-Quellcode:
nur "c:\windows\system32" zurück.
GetFullPathName("c:\windows\system32")
Ich habe auch schon probiert mit
Delphi-Quellcode:
; aber die Struktur WIN32_FIND_DATA enthält leider nur die unterste Ebene, hier "System32". Jetzt könnte man natürlich den gesamten Pfad damit abarbeiten, aber vielleicht gibt's da ja auch schon eine API-Funktion dafür...
FindFirstFile("c:\windows\system32")
|
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Ich versteh nicht so ganz was du willst.
Was soll denn deiner Meinung bei
Delphi-Quellcode:
GetFullPathName('c:\windows\system32')
rauskommen? |
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Ich sehe als Unterschied zwischen Soll und Ist nur die Großkleinschreibung. da könnte GetLongPathName helfen.
|
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Da intern Windows keine Unterschied zwischen Groß- und Kleinschreibung macht, dürfte das egal sein. Es sei denn es geht um Eyecandy beim Anzeigen.
|
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Zitat:
|
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Dann schreib dir eine Funktion, die jeden Buchstaben nach eine Backslash groß schreibt.
Die Glaskugel hat ja mal funktioniert. :shock: |
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Zitat:
Zitat:
|
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Warum muss das nicht immer stimmen? Genau das willst du doch oder?
|
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Zitat:
|
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Zitat:
Aber es gibt doch auch Ordnerstrukturen die so aussehen:
Aber das ist ab diesem Zeitpunkt alles nur noch reine Spekulation. Der TE soll sich mal dazu äußern, was er wirklich will. Ich habe die Eingangsfrage nämlich auch nicht wirklich verstanden. Für mich ist da auch nur der Unterschied der Groß-/Kleinschreibung zu erkennen. :roll: |
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Erst alles klein schreiben (LowerCase) und dann "jeden ersten Buchstaben nach einem Backslash groß".
|
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Zitat:
|
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Warum?
Code:
Oder was hab eich da jetzt übersehen?
C:\MeinOrdner\meinDritterOrdner\ -> C:\meinordner\meindritterordner\ -> C:\Meinordner\Meindritterordner\
|
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Delphi-Quellcode:
Alternative:
function TitleCase2(const sText: String;
const bLowerCaseFirst: Boolean = True): String; const cDelimiters = [#9, #10, #13, ' ', ',', '.', ':', ';', '"', '\', '/', '(', ')', '[', ']', '{', '}']; var iLoop: Integer; begin Result := sText; if (Result <> '') then begin Result[1] := UpCase(Result[1]); for iLoop := 2 to Length(Result) do if (Result[iLoop - 1] in cDelimiters) then Result[iLoop] := UpCase(Result[iLoop]); end; end; function GetLongPathName(ShortName:String):String; var NameS: String; Len : integer; Buffer: array[0..MAX_PATH] of Char; pDummy: PCHAR; begin Len := GetFullPathName(PChar(ShortName), 0, PChar(result), pDummy); SetLength(NameS, Len); GetFullPathName(PChar(ShortName), Len, PChar(NameS), pDummy); result := TitleCase2(NameS); end; procedure TForm1.Button9Click(Sender: TObject); begin Caption:= GetLongPathName('c:\windows\system32'); end;
Delphi-Quellcode:
function TitleCase3(const sText: String;
const bLowerCaseFirst: Boolean = True): String; var iLoop: Integer; begin Result := sText; if (Result <> '') then begin Result[1] := UpCase(Result[1]); for iLoop := 2 to Length(Result) do if (not (Result[iLoop - 1] in ['a'..'z','A'..'Z','0'..'9'])) then Result[iLoop] := UpCase(Result[iLoop]); end; end; function GetLongPathName(ShortName:String):String; var NameS: String; Len : integer; Buffer: array[0..MAX_PATH] of Char; pDummy: PCHAR; begin Len := GetFullPathName(PChar(ShortName), 0, PChar(result), pDummy); SetLength(NameS, Len); GetFullPathName(PChar(ShortName), Len, PChar(NameS), pDummy); result := TitleCase3(NameS); end; procedure TForm1.Button9Click(Sender: TObject); begin Caption:= GetLongPathName('C:\Windows\System32\ATEST\123Test'); end; |
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Zitat:
Aber vorzugsweise sollte sundance sich halt mal äußern. |
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Sorry für die Verwirrung bedingt durch die unklare Formulierung.
Es ist tatsächlich so (Glaskugel = OK), dass mich die korrekte Schreibweise (Groß-/Kleinschreibung) interessiert. Und das, wie schon angemerkt, nicht aus funktionellen, sondern nur aus optischen Gründen. |
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Zitat:
|
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Was liefert das zurück:
Delphi-Quellcode:
GetFullPathName("c:\windows\system32\.")
GetLongPathName kann dir eventuell den Pfad ändern, wenn du einen kurzen Namen übergibts (c:\win~12). |
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Delphi-Quellcode:
-> c:\windows\system32 (das hatte ich auch schon probiert... :?)
GetFullPathName('c:\windows\system32\.')
Delphi-Quellcode:
-> c:\Windows\System32
GetLongPathName('c:\windows\system32')
Damit kann ich "leben"... Es ist ohnehin fraglich, ob die "richtige" Schreibweise für Laufwerksbuchstaben groß oder klein ist... (ich hätte schwören können, dass ich die Funktion schon probiert habe...) Vielen Dank an alle Beteiligten für die spontane Hilfe! |
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Zitat:
Zitat:
Denn sowohl Windows macht intern einen Unterschied und - es wird noch besser - NTFS ist es auch wichtig. Aber wenn du ausdrücken wolltest, daß Groß- und Kleinschreibung in Windows für einen Delphiprogrammierer egal ist, hast du absolut recht. Denn aus dem Win32-Subsystem kommste mit Delphi im Prinzip nicht raus. Wollte nur klarstellen, daß intern durchaus unterschieden wird und ich in meiner Funktion als Treiberentwickler sehr wohl einen Stream ("Dateiinstanz") unter verschiedenen Namen zu verschiedenen Zeitpunkten sehen kann - und zwar nicht nur während die Datei gerade umbenannt wird. Für mich ist das Flag OBJ_CASE_INSENSITIVE dann wichtig. Zitat:
Übrigens kann man einfach - solange es sich um ASCII-Zeichen handelt - das Bit $20 (weil: Ord('a') - Ord('A') = $20) setzen um Kleinschreibung oder löschen um Großschreibung zu erzwingen. |
AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt
Ja, genau so meinte ich es. Ich wollte nur nicht unnötig Verwirrung stuften. :mrgreen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:04 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