2016-07-22 6 views
0

Ich habe ein Programm, das Änderungen in einem lokalen Ordner mit einem FileSystemWatcher-Objekt verfolgt. Das Problem ist, dass dieser Watcher manchmal in einigen Umgebungen und Situationen (ich weiß nicht welche) mir ein Ereignis auf einem DOS-Pfad gibt ("/ Hello/How/Are/You" wird zu etwas wie "/ HE ~ 1/HO ~ 1/AR ~ 1/YO ~ 1 ").Wie DOS-Pfad in normalen Pfad (. NET) konvertieren

Wonach ich suche, ist eine Möglichkeit, diesen Pfad wieder in seinen vollen und normalen Aspekt zurückzudrängen.

Oder zumindest etwas, das mir sagen kann, dass der Pfad tatsächlich ein DOS-Pfad ist, damit ich den Eintrag anders verarbeiten kann.

EDIT: es muss auf langen Pfaden (+260 Zeichen) arbeiten, damit Path.GetFullPath (sShortPath) für mich hier nicht funktioniert!

+0

haben Sie 'Path.GetFullPath' probiert? –

Antwort

2

Path.GetFullPath (@ "/ HE ~ 1/HO ~ 1/AR ~ 1/YO ~ 1") sollte tun, was Sie brauchen.

+0

Ich werde das testen, sobald ich kann! Vielen Dank für Ihre schnelle Antwort! – Matthieu

+0

Okay, eigentlich hat es bei mir nicht funktioniert, weil ich es brauche, um mit einem langen Pfad zu arbeiten. Siehe meine Antwort für meine Lösung! Und ja, ich werde meinen Beitrag mit langer Pfadgenauigkeit aktualisieren;) – Matthieu

1

Die beste Methode ist abhängig, was Sie suchen, wenn Sie nur einmal auf die Datei zugreifen wollen, dann werden die 8Byte Dateinamen

für interne Dateiverweise arbeiten

wenn Sie den Benutzer angezeigt werden sollen oder speichert es dann 2 Option

  1. Path meisten Werkzeuge enthält, die Sie Pfade fullPath = Path.GetFullPath(path1);

  2. FileInfo und 0 manipulieren müssendiese 2 Klassen bieten persistenten Zugriff auf Dateien und Verzeichnisinformationen und während sie mit jedem gültigen Pfad erstellt werden können, haben beide eine Vollständiger Name Eigenschaft, die

+0

Ich möchte hinzufügen, dass sich die Zahl innerhalb des 8-Byte-Pfads im Laufe der Zeit ändern kann (dies kann jedoch versionsspezifisch sein), also so kurz Pfade sollten nicht lange als interne Dateireferenzen gespeichert werden. –

0

Zugriff auf den vollständigen Pfad bietet Wie bereits gesagt, Path.GetFullPath (sShortPath) funktioniert gut, wenn es nicht auf sehr langen Pfaden verwendet wird (+260 Zeichen).

Hier ist ein link Ich folgte, das für mich arbeitete.

GetLongPathName von kernel32.dll funktionierte gut mit mir, ich musste nur die 255 StringBuilder Begrenzung auf einen höheren Wert ändern, damit es mit langen Pfaden arbeiten.

Verwandte Themen