Auf Windows sollten Sie bei Verwendung der "\\\\?\\" Dateiname-Präfix?
Stieß ich auf eine c-Bibliothek zum öffnen von Dateien in einem gegebenen Unicode-Dateinamen. Bevor Sie die Datei öffnen, müssen diese zuerst konvertiert die Dateinamen in einem Pfad durch voranstellen von "\\?\". Gibt es einen Grund, dies zu tun, um andere als erhöhen Sie die maximale Anzahl der zulässigen Zeichen in den Pfad, pro in diesem msdn-Artikel?
Es sieht aus wie diese "\\?\" Pfade erfordern die Unicode-Versionen der Windows-API und standard-Bibliothek.
- Zusätzlich zu Länge-Beschränkungen, Sie können auch die Perioden der Nutzung und Leerzeichen in Dateinamen ohne Einschränkung. Zum Beispiel können Sie eine Datei mit dem Namen
..
wenn Sie wollen,
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, es ist nur für diesen Zweck. Jedoch, Sie werden wahrscheinlich sehen Kompatibilitätsprobleme, wenn Sie sich entscheiden, erstellen Wege über MAX_PATH Länge. Zum Beispiel die explorer-shell, sowie der Eingabeaufforderung (zumindest bei XP, ich weiß nicht über Vista) kann nicht verarbeitet Pfade über die Länge und wird ein Fehler zurückgegeben.
Die beste Verwendung für diese Methode ist wahrscheinlich nicht für neue Dateien erstellen, aber zur Verwaltung von existierenden Dateien, die jemand anderes erstellt haben.
Habe ich es geschafft ein file-server, die routinemäßig bekommen würde-Dateien mit
path_length > MAX_PATH
. Sehen Sie, der Benutzer sieht die Dateien alsH:\myfile.txt
, aber auf dem server war es eigentlichH:\users\username\myfile.txt
. Also, wenn ein Benutzer eine Datei erstellt mit genauMAX_PATH
Zeichen, auf dem server war esMAX_PATH+len("users\username")
.(Erstellen einer Datei mit MAX_PATH Zeichen ist also nicht ungewöhnlich, da beim speichern einer Webseite in Internet Explorer, es verwendet den Seitentitel als Dateinamen, die sehr lang sein kann, für einige Seiten).
Außerdem teilen ein Laufwerk (über Netzwerk oder usb) mit einem Mac oder einer Linux-Maschine, können Sie sich mit Dateien mit Namen wie con, prn oder lpt1. Und wieder, das Präfix können Sie und Ihre Skripte mit diesen Dateien.
Ich denke, das erste, was zu beachten ist, dass "\\?\" nicht, dass der Pfad ein UNC-Pfad. Sie waren genauer, das zweite mal, als Sie ihn genannt, einen UNC-Stil Weg. Aber selbst dann, ist die ähnlichkeit nur mit zwei umgekehrten Schrägstrichen, an den start. Es hat eigentlich nichts damit zu tun, UNC. Das ist gesichert durch die Tatsache, dass Sie haben zu verwenden noch mehr Zeichen um einen UNC-Pfad mit "\\?\" Präfix.
Ich glaube, du hast die ganze Grund für die Verwendung eines Präfix. Es hebt die maximale Länge begrenzen, wie im Artikel beschrieben, die Sie zitiert. Und es gilt nur für Unicode-Pfade; nicht-Unicode-Pfade nicht bekommen, um zu vermeiden, die Grenze durch die mit diesem Präfix.
Eine Sache zu beachten ist, dass das Präfix nicht gestattet ist, relative Pfade, nur für die absolute diejenigen. Möchten Sie vielleicht, um zu überprüfen, dass Ihre C-Bibliothek ehrt diese Einschränkung auf.
Sowie die längeren Wege, die "\\?\" Präfix ermöglicht die Verwendung von Dateien und directory-Namen wie "con" und "aux". Normalerweise Windows interpretieren würde diese altmodische DOS-Geräte.
Ich habe das schreiben von Windows-code seit 1995, und obwohl ich bin mir bewusst, dass der Präfix, habe ich nie gefunden keine Grund, es zu benutzen. Die Erhöhung der Pfad Länge über
MAX_PATH
scheint der einzige Grund für ihn, und weder ich noch meine Programme, auch die Kunden haben immer so getan, meines Wissens.