AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt

Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt

Ein Thema von sundance · begonnen am 31. Aug 2016 · letzter Beitrag vom 5. Sep 2016
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#11

AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt

  Alt 31. Aug 2016, 10:18
Erst alles klein schreiben (LowerCase) und dann "jeden ersten Buchstaben nach einem Backslash groß".
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#12

AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt

  Alt 31. Aug 2016, 10:21
Erst alles klein schreiben (LowerCase) und dann "jeden ersten Buchstaben nach einem Backslash groß".
Klappt bei Aviators und meinen Beispielen eben nicht.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt

  Alt 31. Aug 2016, 10:26
Warum?
Code:
C:\MeinOrdner\meinDritterOrdner\ -> C:\meinordner\meindritterordner\ -> C:\Meinordner\Meindritterordner\
Oder was hab eich da jetzt übersehen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#14

AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt

  Alt 31. Aug 2016, 10:28
Delphi-Quellcode:
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;
Alternative:
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;

Geändert von t.roller (31. Aug 2016 um 11:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#15

AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt

  Alt 31. Aug 2016, 10:30
Warum?
Code:
C:\MeinOrdner\meinDritterOrdner\ -> C:\meinordner\meindritterordner\ -> C:\Meinordner\Meindritterordner\
Oder was hab eich da jetzt übersehen?
Ich habe den OP so interpretiert als würde er eine "kanonische" Form des Namens im Dateisystem wollen.

Aber vorzugsweise sollte sundance sich halt mal äußern.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von sundance
sundance

Registriert seit: 9. Mai 2006
98 Beiträge
 
Delphi 7 Professional
 
#16

AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt

  Alt 31. Aug 2016, 10:36
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.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#17

AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt

  Alt 31. Aug 2016, 10:40
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.
Na dann siehe Post 3.
Uli Gerhardt
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#18

AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt

  Alt 31. Aug 2016, 10:41
Was liefert das zurück:

GetFullPathName("c:\windows\system32\.")

GetLongPathName kann dir eventuell den Pfad ändern, wenn du einen kurzen Namen übergibts (c:\win~12).
  Mit Zitat antworten Zitat
Benutzerbild von sundance
sundance

Registriert seit: 9. Mai 2006
98 Beiträge
 
Delphi 7 Professional
 
#19

AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt

  Alt 31. Aug 2016, 10:52
GetFullPathName('c:\windows\system32\.') -> c:\windows\system32 (das hatte ich auch schon probiert... )

GetLongPathName('c:\windows\system32') -> 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!

Geändert von sundance (31. Aug 2016 um 10:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#20

AW: Funktion gesucht, die den tatsächlichen Pfadnamen ermittelt

  Alt 5. Sep 2016, 17:04
Da intern Windows keine Unterschied zwischen Groß- und Kleinschreibung macht, dürfte das egal sein.
Du meinst sicher:

Da das Win32-Subsystem keinen Unterschied zwischen Groß- und Kleinschreibung macht, dürfte das egal sein.


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.

Es ist ohnehin fraglich, ob die "richtige" Schreibweise für Laufwerksbuchstaben groß oder klein ist...
Korrekt ist die Großschreibung. Guck mal mit WinObj (von Microsoft) in \GLOBAL?? (bzw. \DosDevices oder \?? vor Vista), dann weißte warum.

Ü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.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:34 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