Entwickler-Ecke

Dateizugriff - ExtractShortPathName funktioniert nicht!


galagher - Sa 24.12.05 18:51
Titel: ExtractShortPathName funktioniert nicht!
Hallo!

Ich habe folgenden Pfadnamen, den ich "verkürzen" will, was aber nicht funktioniert - er wird unverändert zurückgegeben. Der Ordner existiert aber:

Delphi-Quelltext
1:
2:
3:
4:
5:
var
  FileName: string;
begin
  FileName:='D:\Delphi-Programme';
  Caption := ExtractShortPathName(FileName);

Kann es sein, dass ExtractShortPathName nicht korrekt auf NTFS-Partitionen funktioniert? Wenn ich einen gleichnamigen Ordner auf einer FAT32-Partition anlege, klappt ExtractShortPathName korrekt.

Als ich mit COMMAND.COM einen Test machte, stellte ich fest, das er mit DIR zwar aufgelistet wird, ich aber nicht mit CD in den Ordner wechseln kann - "Ungültiges Verzeichnis". Mit CMD hingegen klappt es.

Meine Fragen nun: Liegt es an NTFS, und gibt es eine alternative Möglichkeit, den kurzen Datei- oder Ordnernamen zu ermitteln?
Danke schon mal!


Lannes - So 25.12.05 00:35

Hallo,

teste den Code mal:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function GetShortName(sLongName: string): string;
var
  sShortName:    string;
  nShortNameLen: Integer;
begin
  SetLength(sShortName, MAX_PATH);
  nShortNameLen := GetShortPathName(PChar(sLongName), PChar(sShortName), MAX_PATH - 1);
  if (0 = nShortNameLen) then
  begin
    // handle errors...
  end;
  SetLength(sShortName, nShortNameLen);
  Result := sShortName;
end;


galagher - So 25.12.05 12:15

Funktioniert auch nicht, es wird immer der volle, lange Dateinamen zurückgegeben. Bei einigen Ordnern, zB. bei C:\Dokumente und Einstellungen wird C:\DOKUME~1 zurückgegeben.

Bei manchen, bereits bestehenden Ordnern klappt es, bei neu angelegten nicht. Mit den Rechten hat es offenbar nichts zu tun. Es scheint, als gäbe es gar keinen kurzen Dateinamen mehr! Wie gesagt, auch DOS findet den Ordner bzw. die Datei nicht. Sobald jedoch keine Leerzeichen im namen vorkommen, klappt wieder alles.


Fabian W. - So 25.12.05 12:56

vlt hilft es wenn du Adressen, die leerzeichen enthaltern in " setzt.


Delphi-Quelltext
1:
getdenname('"D:\Delphi Programme\"');                    


mfg


galagher - So 25.12.05 18:44

user profile iconFabian W. hat folgendes geschrieben:
vlt hilft es wenn du Adressen, die leerzeichen enthaltern in " setzt.

Geht leider auch nicht, da wird ein leerer String zurückgegeben, da der Pfad offenbar wörtlich, d.h., mit Anführungszeichen als Bestandteil des Namens, verarbeitet wird. Ist zwar lästig, aber ich werde mein Programm wohl völlig neu schreiben müssen!

Ok, ist wohl bei NTFS so, interessanterweise aber nur bei neu angelegten Ordnern und Dateien; solche, die beim Windows-Setup erstellt wurden, wie eben zB. "Dokumente und Einstellungen", werden korrekt gekürzt. Zum Einen muss ja irgendwann Schluss sein mit den Anachronismen aus der DOS-Zeit, zum Anderen hat Billy da nur halbe Sachen gemacht, denn sein immer noch vorhandenes MS-DOS kann nur mit kurzen Dateinamen, und wenn es die nicht gibt, gibt's eben keinen Zugriff auf die Datei oder den Ordner. Das ist besonders gut, wenn man mal von CD booten muss! :mrgreen: (Fragt jetzt nicht, wie oft man das schon macht!) Es geht um's Prinzip.

Ich meine, wenn ich oder wer auch immer hier im Forum ein Programm schreibt, und dazu eine Zusatzsoftware, dann wird der doch darauf schauen, das die beiden auch kompatibel sind, im Falle von DOS eben FAT32- oder NTFS-fähig. Du kannst zwar Startdisketten erstellen, nur die nützen dir nichts bei NTFS, denn 1. findet DOS die NTFS-Partition nicht, und, wenn du dann ein Programm einsetzt, das NTFS zumindest lesen kann, findet DOS 2. etliche Dateien nicht. Ist besonders hilfreich, wenn man mit einem Virenscanner drübergeht - die Datei/der Ordner existiert dann einfach nicht!


Delete - Mo 26.12.05 11:55

user profile icongalagher hat folgendes geschrieben:

Ok, ist wohl bei NTFS so, interessanterweise aber nur bei neu angelegten Ordnern und Dateien; solche, die beim Windows-Setup erstellt wurden, wie eben zB. "Dokumente und Einstellungen", werden korrekt gekürzt.

Dann wirst du irgendwann mal die Unterstützung für kurze Dateinamen deaktiviert haben.


galagher - Mo 26.12.05 14:35

user profile iconLuckie hat folgendes geschrieben:

Dann wirst du irgendwann mal die Unterstützung für kurze Dateinamen deaktiviert haben.

Stimmt, Wert war auf 1 statt auf 0. Aber ich war's nicht, denn ich musste mir erst mal den Weg dorthin "ergooglen". Wurde vielleicht beim Installieren eines Programmes geändert? Aber egal, jetzt funktioniert es wieder. :D


damadmax - Sa 04.03.06 10:54

wär hilfreich zu erfahren wo man das wieder einschaltet...

werd jetzt erstmal googlen gehn


galagher - Sa 04.03.06 11:45

user profile icondamadmax hat folgendes geschrieben:
wär hilfreich zu erfahren wo man das wieder einschaltet...

HKEY_LOCAL_MACHINESYSTEMCurrent ControlSetControlFileSystem
1 = keine kurzen Dateinamen
0 = kurze Dateinamen

Gefunden in:
http://www.pcgames.de/?menu=0901&s=thread&bid=461&tid=4190172&x=24


damadmax - So 05.03.06 19:03

danke :)