Pourquoi ne pouvez-vous pas utiliser des caractères spéciaux dans un nom de fichier, comme «?» Ou «;»?

17

Lorsque j'essaie d'enregistrer un fichier, si j'utilise des caractères spéciaux dans le nom (tels que deux points, un point d'interrogation ou un point d'exclamation) dans Windows, je reçois un message indiquant que le nom de fichier n'est pas valide.

Pourquoi donc?

user284989
la source
Dans quel programme essayez-vous d'enregistrer un fichier, et le caractère incriminé dans le fichier ou (comme il semble) dans le nom de fichier?
Jukka K. Korpela,

Réponses:

22

Il y a plusieurs caractères qui ont une signification particulière pour Windows (et pour DOS, d'où la plupart des caractères sont originaires)

de MSDN :

Un nom de fichier ne peut contenir aucun des caractères suivants:
\ /: *? "<> |

/est un commutateur (et également un séparateur de répertoires).
\est un séparateur de répertoire.
:est un désignateur de lecteur.
*et ?sont des caractères génériques utilisés dans la recherche.
"est un moyen d'autoriser les espaces dans les paramètres.
<et >sont une redirection qui permet à l’entrée et à la sortie d’un programme de provenir d’autre chose que l’écran / le clavier.
|est un canal qui permet d'utiliser la sortie d'un programme comme entrée pour le suivant.

SeanC
la source
1
Pour clarifier cette réponse, ces caractères spéciaux pourraient interférer avec l'analyse d'une ligne de commande (ou chemin) s'ils se trouvaient dans un nom de fichier. Il n'est pas nécessaire de délimiter le nom de fichier de quelque manière que ce soit (par exemple, entourez-le de guillemets ou d'espaces), donc la rencontre d'un tel caractère spécial entraînerait une analyse incorrecte (c'est-à-dire que la partie caractère spécial du nom de fichier ou un opérateur?).
sciure de bois
1
On peut cependant soutenir que certaines de ces restrictions ne sont plus nécessaires en raison de la gestion des noms de fichiers longs et des guillemets. \ ? *et "sont les seuls vraiment nécessaires dans la syntaxe actuelle, car les autres caractères ne sont utiles qu'en dehors des guillemets. L'exception est: qui n'est utile qu'en tant que deuxième caractère, qui pourrait être interdit tout en le permettant ailleurs. En d'autres termes, aucun fichier nommé A:A letter's story.txt, mais aucun problème avec un fichier nomméSarah: My favorite cat.txt
trlkly
<>"sont des caractères génériques réservés. Windows les utilise pour implémenter la sémantique complexe pour DOS *?.lors de la traduction en NT natif, qui a une sémantique simple pour *?.. Les six caractères génériques sont réservés car Windows implémente la correspondance des caractères génériques dans le système de fichiers lui-même, c'est-à-dire directement dans l' NtQueryDirectoryFileappel système, sans mécanisme d'échappement. Sous Unix, les caractères génériques sont implémentés au niveau de l'application, généralement par un shell qui prend en charge leur échappement.
Eryk Sun
Notez que cela :est généralement réservé dans les noms de fichiers, mais pas dans les chemins de fichiers. Il est utilisé pour les noms de périphériques et comme délimiteur pour les flux de fichiers (par exemple, "nom de fichier: nom de flux: type de flux"). En outre, certains systèmes de fichiers tels que le VirtualBox permet partagé le dossier système de fichiers :, |et des caractères de contrôle ASCII (1-31) dans les noms de fichiers, mais ils sont réservés dans tous les systèmes de fichiers de Microsoft à l' exception du système de fichiers tube nommé.
Eryk Sun