Les autres réponses pour l'instant, tout semble sur le point droit sur les *nix côté des choses, mais je vais ajouter un avertissement à ce sujet sur Windows.
Vous avez menti (par omission) par la documentation.
MAX_PATH
est en effet défini, et probablement même s'applique à des fichiers stockés sur FAT ou FAT32. Cependant, aucun nom de chemin d'accès peut être préfixé par \\?\
de raconter l'API Windows pour ignorer MAX_PATH
et de laisser le pilote de système de fichiers sur son propre esprit. Après cela, les définitions obtenir floue.
Ajouter au mélange le fait que les noms de chemin d'accès sont en fait des caractères Unicode (bien, UT-16) et que, lorsque la "ANSI" API est utilisée la conversion vers et depuis l'intérieur de l'Unicode nom dépend d'un tas de facteurs, y compris la page de code, et vous avez une recette pour la confusion.
Une bonne description des règles pour Windows est à MSDN. Les règles sont beaucoup plus compliqué que ce que j'ai résumé ici.
Edit: j'ai changé d' \\.\
de \\?\
dans le ci-dessus grâce à l'observation de KitsuneYMG.
Windows les chemins et les espaces de noms sont compliqués. Certains pourraient même dire qu'ils sont trop compliqués. Une source de complexité, c'est que le Win32 (et maintenant Win64) de l'API est un sous-système qui fixe sur le haut de la Windows NT système natif.
Un chemin sans préfixe est compatible avec toute la gamme la plus large de plates-formes Windows. Si elle est restreinte à des caractères ASCII 7 bits, il est compatible avec DOS 16 bits depuis la version 2.0 (à chaque fois que les sous-répertoires ont été introduites, ce qui pourrait en fait avoir été dans le DOS 3; mais le DOS 1.0 avait répertoires racine et l' \
personnage avait pas de signification particulière).
L' \\?\
préfixe cause l'équilibre du nom de chemin d'accès pour être passé sur verbatim approprié pilote de système de fichiers, qui est ce qui produit l'effet de l'abandon de la restriction à l' MAX_PATH
caractères. Si le long nom de chemin d'accès est également sur un partage réseau, vous pouvez utiliser une extension de nom UNC avec le préfixe \\?\UNC\server\share\
, au lieu de la normale nom UNC \\server\share\
. L'utilisation de ce préfixe limite la portabilité pour Win32 et, plus tard, les plates-formes Windows, mais si vous avez besoin de support pour Windows 16 bits sur un matériel d'ancienne génération, qui n'est pas un gros problème.
L' \\.\
préfixe est un animal différent. Il permet d'accéder à l'appareil des objets au-delà de l'ensemble de spécialement nommé dispositifs qui sont mappées automatiquement par Windows comme spécial des noms de fichiers dans chaque dossier. Ces noms spéciaux comprennent CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, et LPT9. Notez que tous ces noms sont spéciaux de savoir si ou non une extension est utilisée, ou dans un mélange de majuscules ou en minuscules. Mais il est possible que vous ayez 10 ou plusieurs ports COM installé. Cela se produit très rapidement, si vous jouez avec les modems USB ou port série USB, adaptateurs, puisque chaque unique USB port série sera affecté à une distincte COMn nom. Si vous avez besoin d'accéder à la 50e port série, vous pouvez le faire seulement avec le nom de l' \\.\COM50
parce que COM50 est pas un nom spécial comme COM1 est.
La page MSDN j'ai cité ci-dessus a eu la distinction droit, j'ai simplement tapé le mauvais préfixe dans ma réponse originale à cette question.