In der Windows-Version meines aktuellen persönlichen Projekts möchte ich extended length filepaths unterstützen. Daher bin ich etwas verwirrt darüber, wie die GetFullPathNameW-API zum Auflösen des vollständigen Namens eines langen Dateipfads verwendet werden kann.GetFullPathNameW und lange Windows-Dateipfade
der MSDN nach (in Bezug auf die lpFileName Parameter):
In der ANSI-Version dieser Funktion ist der Name MAX_PATH Zeichen begrenzt. Um dieses Limit auf 32.767 Zeichen zu erweitern, rufen Sie die Unicode-Version der Funktion auf und fügen Sie "\? \" Dem Pfad voran. Weitere Informationen finden Sie unter Benennen einer Datei.
Wenn ich verstehe dies, um richtig, eine erweiterte Länge Filepath mit GetFullPathNameW
zu verwenden, ich brauche einen Pfad angeben, mit dem \\?\
Präfix angebracht. Da das Präfix \\?\
nur vor Volumenbuchstaben oder UNC-Pfaden gültig ist, würde dies bedeuten, dass die API zum Auflösen des vollständigen Namens eines Pfads relativ zu dem aktuellen Verzeichnis unbrauchbar ist.
Wenn das der Fall ist, gibt es eine andere API, die ich verwenden kann, um den vollständigen Namen eines Dateipfades wie ..\somedir\somefile.txt
aufzulösen, wenn die resultierende Name Länge MAX_PATH
überschreitet? Wenn nicht, wäre ich in der Lage, GetCurrentDirectory
mit dem relativen Dateipfad (\\?\C:\my\cwd\..\somedir\somefile.txt
) zu kombinieren und es mit GetFullPathNameW
zu verwenden, oder müsste ich die gesamte Dateipfadauflösung alleine bewältigen?
Es ist nicht vernünftig klingt, dass eine Funktion, um den vollständigen Pfad zu finden, müssen Sie den vollständigen Pfad liefern. Warum also nicht versuchen, was die Ärzte sagen? Vielleicht wirst du angenehm überrascht sein. –
GetCurrentDirectory() ist ein Unixismus, der grundlegend MAX_PATH belastet ist. Da das native Betriebssystem keine relativen Pfade oder Standardverzeichnisse kennt, müssen Sie es immer mit einem vollständigen Pfadnamen versehen. Sie müssen es loswerden, um weiter zu kommen. –
@ Cheersandhth.-Alf War nicht wirklich klar, wenn Sie vorschlagen, dass ich versuche, \\? \ C: \ my \ cwd \ .. \ somedir \ somefile.txt 'oder' \\? \ .. \ somedir \ somefile .txt', also habe ich beides versucht. Der erste Befehl wird korrekt in '\\? \ C: \ my \ somedir \ somefile.txt' aufgelöst (was einen Teil meiner Frage beantwortet), während der zweite falsch in' \\ \ somedir \ somefile.txt \ aufgelöst wird. –