AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Groß/Kleinschreibung (Pfad) Original erhalten?
Thema durchsuchen
Ansicht
Themen-Optionen

Groß/Kleinschreibung (Pfad) Original erhalten?

Ein Thema von MicMic · begonnen am 18. Aug 2018 · letzter Beitrag vom 1. Okt 2018
Antwort Antwort
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

AW: Groß/Kleinschreibung (Pfad) Original erhalten?

  Alt 18. Aug 2018, 19:18
Such mal hier im Forum nach CSIDL
Ist mir ein Begriff, kenne es aber nur in Verbindung mit Standard-Ordner/System-Ordner usw.
Wenn ich jetzt z.B. ein neuen Ordner anlege "C:\TeSt", würde ich gerne ohne FindFirst/Next da herankommen, sprich ich übergebe "c:\test" und bekomme "C:\TeSt" zurück.

Michael
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.690 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Groß/Kleinschreibung (Pfad) Original erhalten?

  Alt 18. Aug 2018, 21:10
Ich habs nicht getestet, vielleicht gibt Dir ExpandFileName den Namen in schön wieder?
Oder ExtractFilePath ?
Oder System.IOUtils.TPath.GetDirectoryName ?

Reines WinApi würde ich SHGetFileInfo eventuell mit PIDL verwenden, das sollte Dich auch ans Ziel bringen.
Gruß vom KodeZwerg

Geändert von KodeZwerg (18. Aug 2018 um 21:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.047 Beiträge
 
Delphi 12 Athens
 
#3

AW: Groß/Kleinschreibung (Pfad) Original erhalten?

  Alt 18. Aug 2018, 21:52
Ich denke, du suchst ExpandFileNameCase

Intern wird dort aber auch auf FindFirst/FindClose zurückgegriffen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: Groß/Kleinschreibung (Pfad) Original erhalten?

  Alt 18. Aug 2018, 22:36
Danke für die Hilfestellung.
habe mal alles ausprobiert (ExtractFilePath, ExpandFileName, GetDirectoryName) und mit SHGetFileInfo auch herumexperimentiert.
Keine Erfolge und zu "ExpandFileNameCase"... (kannte ich noch nicht) da kann man etwas herausholen aber dennoch müsste man das Verzeichnis (z.B. "C:\Ich\bin\so\froh\wie\der\Mops\im\Hafenstroh \") splitten und in Strings aufteilen. Am Ende eines Pfads kann man noch "\." oder "\.." angeben um ein oder zwei Verzeichnisse zurück zu gehen und hier die originale Groß-/Kleinschreibung zu bekommen. Nur nicht alles auf einmal. Aber wegen diesem Splitten und stets erneuten Aufruf von FindFirst (auf die Idee bin ich nämlich auch gekommen) - was die Funktion ja macht, ist das alles nicht gerade Optimal. Naja, nicht so schlimm. Trotzdem Danke für eure Hilfestellung.

Michael
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.047 Beiträge
 
Delphi 12 Athens
 
#5

AW: Groß/Kleinschreibung (Pfad) Original erhalten?

  Alt 18. Aug 2018, 22:59
Keine Erfolge und zu "ExpandFileNameCase"... (kannte ich noch nicht) da kann man etwas herausholen aber dennoch müsste man das Verzeichnis (z.B. "C:\Ich\bin\so\froh\wie\der\Mops\im\Hafenstroh \") splitten und in Strings aufteilen.
Ich hatte jetzt angenommen, die Funktion tut bereits alles was du brauchst. Vielleicht habe ich die Anforderung aber auch nur falsch verstanden.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.690 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Groß/Kleinschreibung (Pfad) Original erhalten?

  Alt 18. Aug 2018, 23:33
Habe es auch noch mit FileCtrl.ProcessPath(s,drv,Dir,filename); probiert, auch negativ.
Lustigerweise schlägt selbst ein FileCtrl.SelectDirectory() fehl, so ein Ergebnis hätte ich von so einer Funktion nicht erwartet. Screenshot - 19_08.jpg

Ps, im Nachhinein ist mir auch eingefallen mit SHGetFileInfo bekommt man nur Infos, wie der Name selbst beinhaltet, nur leider nicht Deine benötigten. FindFirst() scheint wohl einzige Api zu sein, oder aus MFT auslesen.
Gruß vom KodeZwerg

Geändert von KodeZwerg (18. Aug 2018 um 23:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.690 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Groß/Kleinschreibung (Pfad) Original erhalten?

  Alt 19. Aug 2018, 00:40
Nun habe ich eine Lösung.
Delphi-Quellcode:
uses
  ActiveX, ShlObj, SHDocVw, ComObj;

function PathToPIDL(const Path: string): PItemIDList;
const
  SFGAO_STREAM = $00400000;
var
  Count: ULONG;
  Attributes: ULONG;
  ShellFolder: IShellFolder;
begin
  OleCheck(SHGetDesktopFolder(ShellFolder));
  Attributes := SFGAO_FOLDER or SFGAO_STREAM;
  OleCheck(ShellFolder.ParseDisplayName(0, nil, PWideChar(WideString(Path)), Count, Result, Attributes));
  if not ((Attributes and SFGAO_FOLDER = SFGAO_FOLDER) and (Attributes and SFGAO_STREAM <> SFGAO_STREAM)) then
   begin
     CoTaskMemFree(Result);
     raise Exception.Create('Could not convert string to PIDL');
   end;
end;

function PIDLToPath(const PIDL: PItemIDList): string;
var
  Path: array[0..Max_Path] of Char;
begin
  if ShGetPathFromIDList(PIDL, Path) then
   Result := Path
   else raise Exception.Create('Could not convert PIDL to string');
end;

procedure TfrmMain.FormCreate(Sender: TObject);
var
  s: string;
  PIDL: PItemIDList;
begin
  s := 'c:\uSERs\PUBlic\DeskTop';
  PIDL := PathToPIDL(s);
  s := PIDLToPath(PIDL);
  Memo1.Lines.Add(S);
end;
Zitat:
C:\Users\Public\Desktop
Viel Spass damit.

ps: Bearbeite das Uses, kann sein das da zuviel steht.
Gruß vom KodeZwerg

Geändert von KodeZwerg (19. Aug 2018 um 01:09 Uhr) Grund: uses hinzugefügt
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:47 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