locked
Verzeichnisse ausweisen, wie sie im Explorer angezeigt werden

    Frage

  • Guten Tag,

    Es ist, wenn ich mich nicht vertue, ja so, dass gewisse Verzeichnisse seit Windows Vista in lokalisierten Versionen im Explorer anders angezeigt werden, als sie im Dateisystem heißen - C:\Users als C:\Benutzer, C:\Program Files als C:\Programme usw. Ich verstehe die technische Motivation, die Namen bestimmter Verzeichnisse über Sprachgrenzen hinweg zu vereinheitlichen, aber diese Praxis stellt mich vor ein Problem: Wenn ich im Dateisystem etwas nachschlage und dem Benutzer anzeige, laufe ich in Gefahr, dass der das Verzeichnis im Explorer gar nicht finden kann, weil es ihm anders angezeigt wird, als ich es gefunden habe.

    Gibt es im WinAPI (oder auch woanders) eine Funktion oder etwas Vergleichbares, die mir einen Datei- bzw. Verzeichnisnamen so umwandelt, wie er im Explorer angezeigt wird? Falls möglich, möchte ich es vermeiden, mich durch den Verzeichnisbaum zu hangeln und desktop.inis von Hand parsen zu müssen.

    Freundliche Grüße.

     

    Montag, 7. März 2011 20:36

Antworten

Alle Antworten

  • Das ist nicht korrekt.

    Der Explorer zeigt immer einen gültigen Pfad an. Innerhalb des Dateisystems wird dies über so genante Junction erreicht.
    Wenn also *Programme* als Pfadim Explorer angzeigt wird ist dis eine Junction von *C:\Programme\* auf *C:\Program Files\*

    Siehe auch:

     


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Dienstag, 8. März 2011 10:45
  • Das ist schon richtig, nur wenn ich jetzt programmatisch "C:\Program Files" bekomme und ausgebe, sieht der Benutzer im Explorer trotzdem nur "C:\Programme". Dann ruft er bei mir an und fragt, ob das das gleiche ist.

    Wie dem auch sei, die Links helfen mir weiter; ich werde damit etwas Zeit verbringen. Danke!

     

    Dienstag, 8. März 2011 16:34
  • Es liegt an Dir, was Du ausgibst und anzeigst. Wenn Du die Shell-Dialoge benutzt zeigen die doch sowieso alles "korrekt" an wie es der Nutzer sehen soll. Wo gibt es den bei Dir die Probleme?


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Dienstag, 8. März 2011 18:36
  • Ich lese während der Installation aus HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders Verzeichnisnamen aus, um Vorschläge für den Installationsort zu machen. Dort stehen sie auf Englisch, und ich benutze sie intern natürlich auch so, wie ich sie da kriege, aber es wäre für die Anzeige nett, sie in lokalisierter Form ausweisen zu können. Will sagen, ich habe intern C:\Users\Benutzername\My Documents\Bezeichner, will dem Benutzer aber C:\Benutzer\Benutzername\Eigene Dateien\Bezeichner anzeigen (wenn es sich um ein deutsches System handelt), damit der sich nachher in seinem System noch zurechtfindet.

     

    Mittwoch, 9. März 2011 18:13
  • > Ich lese während der Installation aus HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders Verzeichnisnamen aus, um Vorschläge für den Installationsort zu machen. Dort stehen sie auf Englisch, und ich benutze sie intern natürlich auch so, wie ich sie da kriege, aber es wäre für die Anzeige nett, sie in lokalisierter Form ausweisen zu können. Will sagen, ich habe intern C:\Users\Benutzername\My Documents\Bezeichner, will dem Benutzer aber C:\Benutzer\Benutzername\Eigene Dateien\Bezeichner anzeigen (wenn es sich um ein deutsches System handelt), damit der sich nachher in seinem System noch zurechtfindet.

    1. Ist das Auslesen dieser Registry Pfade falsch! Richtig ist alleine die Verwendung von SHGetFolderPath.
    Wie kommst Du auf diesen Registry Pfad? Diese Methode ist in der MSDN nicht dokumentiert, aber sie kursiert seit Windows95 als einer der schlechtesten Tipps aller Zeiten im Netz. Und das Beste es hat nicht mal in der finalen Windows95 Version letzten Endes funktioniert.
    http://blogs.msdn.com/b/oldnewthing/archive/2003/11/03/55532.aspx

    2. Leider kann man von den lokal-benamten Objekten (Eigene Dateien/ Programme) nicht auf existierende Junctions zurückschließen. Es gibt nicht für alle benamten Objekte in der Shell auch Junctions.
    Siehe z.B. "Programme (x86)". Es gibt nur den physikalischen Pfad "C:\Program Files (x86)", aber keine Junction von C:\Program
    D.h. es gibt nur physikalisch den englischen Pfad auch wenn die Shell etwas anderes anzeigt!

    Oder anders ausgedrückt: Die Junctions existieren nur zur Rückwärtskompatibilität, denn sie bilden die alten Strukturen unter XP ab.

    3. Du kannst aber dennoch mit SHGetFileInfo Dir eine Baumanzeige aufbauen, die die internen Namen anzeigt. Bei der Auswahl aber am Ende wirst Du dennoch auf den physikalischen Namen zurückgreifen müsen.
    Du musst Dich also wohl oder übel an die "physikalischen Namen" halten.

    4. Was nicht dagegen spricht eine eigene Aufbereitung des Pfades zu präsentieren wie dies auch der Explorer in der Adressleiste macht, wenn er
    C:\Users\Martin\Documents als
    Computer > PC-xyz  > Benutzer > Xyz > Eigene Dokumente anzeigt


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Donnerstag, 10. März 2011 09:34
  • Oh, gut, dass Du das sagst. Woher die Idee mit der Registry kommt, kann ich beim besten Willen nicht mehr sagen. Es handelt sich um ziemlich alten Code, der ursprünglich auf NT 4 (ich glaube, es war schon 4) gelaufen ist und das Startmenü raussuchen sollte (meine ich mich so dunkel zu erinnern). Gut möglich, dass ich damals Yahoo befragt habe und bei einer suboptimalen Lösung gelandet bin. Wird gleich geändert.

    Dass die lokalisierten Pfade nicht gültig sind, ist mir zwischenzeitlich auch aufgefallen, und vermutlich schläft die ganze Kiste jetzt eh ein. Um die intern benutzten Pfade ging es nie - da selbst zusammengefrickelten Kram zu benutzen, war mir gar nicht in den Sinn gekommen (obwohl ich damit gerechnet hatte, dass sie gültig bleiben). Marketing fand es halt unschön, dass Pfade ausgewiesen werden, die im Explorer nicht zu finden sind. Allerdings ist es ja auch keine Lösung, Pfade auszuweisen, die keine Pfade sind.

    Vielen Dank für Deine Mühe.

     

    • Bearbeitet Burzmali Freitag, 11. März 2011 11:51 Formatierung
    Freitag, 11. März 2011 11:50
  • Die Pfade sind sehr wohl im Explorer zu finden ;)

    Nur der Explorer hat seine eigenen Regeln wie er bestimmte Namen anzeigt...


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Samstag, 12. März 2011 17:06