Un nom de fichier sert à identifier de manière unique un fichier informatique dans un système de fichiers . Différents systèmes de fichiers imposent différentes restrictions quant à la longueur des noms de fichiers. Un nom de fichier peut (selon le système de fichiers) inclure : Les composants nécessaires à l'identification d'un fichier par les utilitaires et les applications varient selon les systèmes d'exploitation, tout comme la syntaxe et le format d'un nom de fichier valide. Les caractères autorisés dans les noms de fichiers dépendent du système de fichiers. La plupart des systèmes de fichiers autorisent les lettres de A à Z et les chiffres de 0 à 9 ; beaucoup prennent en charge des caractères supplémentaires, tels que les lettres de a à z, les caractères spéciaux et d’autres caractères imprimables comme les lettres accentuées, les symboles des alphabets non latins et les symboles des écritures non alphabétiques. Certains systèmes de fichiers autorisent même les caractères non imprimables, notamment la sonnerie , le caractère nul , le retour à la ligne et le saut de ligne , dans un nom de fichier bien que la plupart des utilitaires ne les gèrent pas correctement. Les noms de fichiers peuvent inclure des éléments tels qu'un numéro de révision ou de génération du fichier, un numéro de séquence numérique (largement utilisé par les appareils photo numériques via la norme DCF ), une date et une heure (largement utilisées par les logiciels d'appareil photo des smartphones et pour les captures d'écran ), ou un commentaire tel que le nom d'un sujet ou d'un lieu ou tout autre texte permettant d'identifier le fichier. Certains utilisent le terme « nom de fichier » pour désigner une spécification complète incluant le périphérique, les sous-répertoires et le nom du fichier, comme par exemple : C:\Program Files\Microsoft Games\Chess\Chess.exe sous Windows . Dans ce cas, le nom du fichier est Chess.exe . Certains utilitaires, comme l'Explorateur Windows, proposent une option permettant de masquer l'extension.ordinateurs centraux et mini-ordinateurs disposaient de systèmes d'exploitation où les fichiers du système étaient identifiés par un nom d'utilisateur ou un numéro de compte. Par exemple, sur les systèmes d'exploitation TOPS-10 et RSTS/E de Digital Equipment Corporation , les fichiers étaient identifiés par Sur OS/360 et les systèmes d'exploitation successeurs d' IBM , un nom de fichier peut comporter jusqu'à 44 caractères, composés de lettres majuscules, de chiffres et d'un point. Il doit commencer par une lettre ou un chiffre, contenir au moins un point tous les 8 caractères, et ne peut pas contenir deux points consécutifs. Le nom doit se terminer par une lettre ou un chiffre. Par convention, lors de l'utilisation de TSO , les lettres et les chiffres précédant le premier point correspondent au numéro de compte du propriétaire ou au numéro du projet auquel le fichier appartient. Toutefois, cette convention n'est pas obligatoire. Sur le système MUSIC/SP de l'Université McGill , les noms de fichiers étaient composés de Le système d'exploitation Univac VS/9 utilisait des noms de fichiers composés de En 1985, la RFC 959 a officiellement défini un chemin d'accès comme étant la chaîne de caractères qu'un utilisateur doit saisir dans un système de fichiers afin d'identifier un fichier. Sur les premiers ordinateurs personnels utilisant le système d'exploitation CP/M , les noms de fichiers comportaient toujours 11 caractères. On parlait alors de nom de fichier 8.3 , avec un maximum de 8 octets pour le nom et de 3 octets pour l'extension. Les utilitaires et applications permettaient aux utilisateurs de spécifier des noms de fichiers sans espaces de fin et d'ajouter un point avant l'extension. Ce point n'était pas stocké dans le répertoire. L'utilisation de caractères de 7 bits seulement permettait d'inclure plusieurs attributs de fichier dans le nom, grâce au bit de poids fort ; ces attributs comprenaient « Lecture seule », « Archive » et « Système ». Cette limitation s'avéra trop restrictive et le nombre de caractères autorisés fut augmenté. Les bits d'attributs furent déplacés dans un bloc spécial du fichier contenant des informations supplémentaires.File Allocation Table ) d'origine, utilisé par Standalone Disk BASIC-80 , imposait une convention de nommage de fichiers 6.3 octets, avec un maximum de 6 octets pour le nom et 3 octets pour l'extension. Les systèmes de fichiers FAT12 et FAT16 d' IBM PC DOS / MS-DOS et de Microsoft Windows (avant Windows 95) utilisaient la même convention 8.3 que le système de fichiers CP/M. Les systèmes de fichiers FAT prenaient en charge les caractères 8 bits, ce qui leur permettait d'inclure des caractères non ASCII dans les noms de fichiers, et stockaient les attributs séparément du nom de fichier. Aux alentours de 1995, VFAT , une extension du système de fichiers FAT de MS-DOS, a été introduit dans Windows 95 et Windows NT . Il autorisait les noms de fichiers longs (LFN) en casse mixte , utilisant des caractères Unicode , en plus des noms classiques « 8.3 »..txt, pour du texte brut ,.pdfpour le format PDF ,.datpour des données binaires non spécifiées, etc.).
Schémas de nommage des fichiers
Les programmes et les périphériques peuvent attribuer automatiquement des noms aux fichiers, tels qu'un compteur numérique (par exemple IMG_0001.JPG) ou un horodatage avec la date et l'heure actuelles.
L'avantage d'un nom de fichier horodaté est qu'il facilite la recherche de fichiers par date, les gestionnaires de fichiers proposant généralement une recherche par nom. De plus, les fichiers provenant de différents appareils peuvent être fusionnés dans un même répertoire sans conflit de noms.
En revanche, les noms de fichiers numérotés ne nécessitent pas que l'horloge interne de l'appareil soit correctement réglée. Par exemple, certains utilisateurs d'appareils photo numériques peuvent ne pas se soucier du réglage de l'horloge de leur appareil. Les appareils connectés à Internet, tels que les smartphones, peuvent synchroniser leur horloge à partir d'un serveur NTP.
La convention de nommage de fichiers la plus courante consiste à limiter les noms de répertoires et de fichiers aux 65 caractères autorisés par le jeu de caractères POSIX . Une méthode fréquente consiste à stocker le titre complet d'un document dans le fichier lui-même, sous forme de caractères UTF-8 arbitraires, puis à générer automatiquement un « slug » à partir de ce titre pour servir de nom de fichier.
Cela crée un chemin absolu ou relatif composé d'une séquence de noms de fichiers.
Nombre de noms par fichier
Les systèmes de fichiers de type Unix permettent à un fichier d'avoir plusieurs noms ; dans les systèmes de fichiers Unix traditionnels, ces noms sont des liens physiques pointant vers l' inode du fichier ou son équivalent. Windows prend en charge les liens physiques sur les systèmes de fichiers NTFS et propose une commande, fsutilsous Windows XP et mklinkversions ultérieures, pour les créer. Les liens physiques diffèrent des raccourcis Windows, des alias classiques de Mac OS/macOS et des liens symboliques . L'introduction des noms de fichiers longs (LFN) avec VFAT a permis l'utilisation d'alias de fichiers. Par exemple, longfi~1.???avec un maximum de huit caractères plus trois, un alias de fichier tel que «long file name.??? » permettait de se conformer aux limitations de la version 8.3 pour les anciens programmes.
Cette propriété était utilisée par l'algorithme de commande de déplacement qui crée d'abord un deuxième nom de fichier, puis supprime uniquement le premier nom de fichier.
D'autres systèmes de fichiers, de par leur conception, ne fournissent qu'un seul nom de fichier par fichier, ce qui garantit que la modification d'un fichier portant un nom de fichier donné n'affecte pas le fichier portant un autre nom de fichier.
Restrictions de longueur
Certains systèmes de fichiers limitent la longueur des noms de fichiers. Dans certains cas, cette limite s'applique à l'intégralité du nom, comme 44 caractères sous IBM z/OS . Dans d'autres cas, elle peut concerner des parties spécifiques du nom, telles que le nom d'un fichier dans un répertoire ou le nom d'un répertoire. Par exemple : 9 caractères ( FAT 8 bits sous Standalone Disk BASIC ), 11 caractères ( FAT12 , FAT16 et FAT32 sous DOS), 14 caractères (anciennes versions d'Unix), 21 caractères ( Human68K ), 31 caractères , 30 caractères ( Apple DOS 3.2 et 3.3), 15 caractères ( Apple ProDOS ), 44 caractères (IBM S/370) ou 255 caractères (anciennes versions d'Unix Berkeley). Les limites de longueur résultent souvent de l'attribution d'un espace fixe dans un système de fichiers au stockage des composants des noms ; par conséquent, l'augmentation des limites nécessite souvent une modification incompatible, ainsi que la réservation de davantage d'espace.
Un problème particulier des systèmes de fichiers stockant les informations dans des répertoires imbriqués est la possibilité de créer un fichier dont le chemin d'accès complet dépasse les limites d'implémentation, car la vérification de la longueur peut ne s'appliquer qu'à certaines parties du nom et non au nom entier. De nombreuses applications Windows sont limitées à une MAX_PATHvaleur de 260 caractères, mais les noms de fichiers Windows peuvent facilement dépasser cette limite. À partir de Windows 10, version 1607 , les limitations de MAX_PATH ont été supprimées.
extensions de nom de fichier
Plusieurs fichiers de sortie créés par une application peuvent utiliser le même nom de base et des extensions différentes. Par exemple, un compilateur Fortran peut utiliser l'extension `.fortran` FORpour le fichier source, `.fortran` OBJpour le fichier objet de sortie et `.fortran` LSTpour le listing. Bien qu'il existe des extensions communes, elles sont arbitraires et une autre application peut utiliser `.fortran` RELet RPT`.fortran`. La longueur des extensions a été limitée, du moins historiquement sur certains systèmes, à 3 caractères, mais en général, elles peuvent avoir n'importe quelle longueur, par exemple `.fortran` html.
Interopérabilité du codage
Il n'existe pas de norme d'encodage générale pour les noms de fichiers.
Les noms de fichiers doivent être échangés entre les environnements logiciels pour le transfert de fichiers en réseau, le stockage sur système de fichiers, les logiciels de sauvegarde et de synchronisation, la gestion de la configuration, la compression et l'archivage des données, etc. Il est donc essentiel de ne pas perdre ces informations entre les applications. C'est pourquoi Unicode s'est largement imposé comme norme d'encodage des noms de fichiers, même si certains logiciels anciens ne sont pas compatibles avec Unicode.
Interopérabilité des indications de codage
Traditionnellement, les noms de fichiers autorisaient n'importe quel caractère, pourvu qu'il soit compatible avec le système de fichiers. Bien que cela permette l'utilisation de n'importe quel encodage et donc la représentation de n'importe quel texte local sur n'importe quel système local, cela a engendré de nombreux problèmes d'interopérabilité.
Un nom de fichier pouvait être stocké sous forme de chaînes d'octets différentes selon les systèmes au sein d'un même pays, par exemple si l'un utilisait l'encodage japonais Shift JIS et l'autre l'encodage japonais EUC . La conversion était impossible car la plupart des systèmes n'exposaient pas la description de l'encodage utilisé pour un nom de fichier dans les informations étendues du fichier. Cela impliquait de deviner l'encodage du nom de fichier à chaque accès, une opération coûteuse.
Une solution a consisté à adopter Unicode comme encodage des noms de fichiers.
Dans le Mac OS classique, cependant, l'encodage du nom de fichier était stocké avec les attributs du nom de fichier.
interopérabilité Unicode
La norme Unicode résout le problème de la détermination de l'encodage.
Néanmoins, certains problèmes d'interopérabilité subsistent, notamment en matière de normalisation (équivalence) ou de version Unicode utilisée. Par exemple, UDF est limité à Unicode 2.0 ; le système de fichiers HFS+ de macOS applique la normalisation Unicode NFD et est, en option, sensible à la casse (insensible à la casse par défaut). La longueur maximale des noms de fichiers n'est pas standardisée et peut dépendre de la taille de l'unité de code. Bien qu'il s'agisse d'un problème important, il reste généralement limité.
Sous Linux, cela signifie que le nom de fichier ne suffit pas à ouvrir un fichier : il faut également la représentation binaire exacte du nom de fichier sur le périphérique de stockage. Ce problème peut être résolu au niveau de l’application, grâce à des opérations de normalisation complexes.
Le problème d'équivalence Unicode est connu sous le nom de « collision de noms normalisés ». Une solution consiste à utiliser la gestion de la composition Unicode non normalisante (Non-normalizing Unicode Composition Awareness) au sein des communautés techniques Subversion et Apache . Cette solution ne normalise pas les chemins d'accès dans le dépôt. La normalisation des chemins n'est effectuée qu'à des fins de comparaison. Cependant, certaines communautés ont breveté cette stratégie, interdisant ainsi son utilisation par d'autres.convmv ».
Mac OS X 10.3 a marqué l'adoption par Apple de la décomposition de caractères Unicode 3.2, remplaçant ainsi la décomposition Unicode 2.1 utilisée précédemment. Ce changement a causé des problèmes aux développeurs de logiciels pour Mac OS X.
Unicité
Dans un même répertoire, les noms de fichiers doivent être uniques. La syntaxe des noms de fichiers s'appliquant également aux répertoires, il est impossible de créer des entrées de fichier et de répertoire portant le même nom dans un même répertoire. Plusieurs fichiers situés dans des répertoires différents peuvent porter le même nom.format de normalisation Unicode, comme NFC ou NFD. Cela signifie que deux fichiers distincts peuvent être créés avec le même nom de fichier texte et une implémentation binaire différente, comme L"\x00C0.txt" (UTF-16, NFC) (A majuscule latin avec accent grave) et L"\x0041\x0300.txt" (UTF-16, NFD) (A majuscule latin avec accent grave).
préservation des étuis de lettres
Certains systèmes de fichiers, comme FAT avant l'introduction de VFAT , stockent les noms de fichiers en majuscules, quelle que soit la casse utilisée lors de leur création. Par exemple, un fichier nommé « MyName.Txt » ou « myname.txt » sera enregistré sous le nom « MYNAME.TXT » (VFAT conserve la casse). Toute combinaison de majuscules et de minuscules peut être utilisée pour désigner le même fichier. Ces systèmes de fichiers sont dits insensibles à la casse et ne conservent pas la casse . Certains systèmes de fichiers interdisent totalement l'utilisation de minuscules dans les noms de fichiers.
Certains systèmes de fichiers conservent les noms de fichiers tels qu'ils ont été créés ; on les appelle systèmes respectant la casse. Ces systèmes peuvent être sensibles ou insensibles à la casse. S'ils sont sensibles à la casse, « MyName.Txt » et « myname.txt » peuvent désigner deux fichiers différents dans le même répertoire, et chaque fichier doit être référencé en respectant la casse exacte. En revanche , sur un système de fichiers insensible à la casse mais respectant la casse, un fichier ne peut porter que l'un des noms suivants dans un répertoire donné à un instant donné : « MyName.Txt », « myname.txt » ou « Myname.TXT ». Ce fichier peut alors être référencé quelle que soit la casse.
Dès leur origine, les systèmes de fichiers d'Unix et de ses dérivés étaient sensibles à la casse et la préservaient. Cependant, tous les systèmes de fichiers de ces systèmes ne sont pas sensibles à la casse ; par défaut, HFS+ et APFS sous macOS sont insensibles à la casse mais la préservent, et les serveurs SMB offrent généralement un comportement insensible à la casse (même lorsque le système de fichiers sous-jacent est sensible à la casse, comme Samba sur la plupart des systèmes de type Unix), et les systèmes de fichiers clients SMB offrent également un comportement insensible à la casse. La sensibilité à la casse des systèmes de fichiers représente un défi considérable pour des logiciels tels que Samba et Wine , qui doivent interagir efficacement avec les systèmes qui traitent les fichiers en majuscules et en minuscules comme étant différents, ainsi qu'avec les systèmes qui les traitent de la même manière.
Caractères et mots réservés
De nombreux utilitaires de système de fichiers interdisent l'apparition de caractères de contrôle dans les noms de fichiers. Dans les systèmes de fichiers de type Unix,Le caractère nul et le séparateur de chemin /sont interdits.
Personnages problématiques
Les utilitaires du système de fichiers et les conventions de nommage sur divers systèmes interdisent l'apparition de certains caractères dans les noms de fichiers ou les rendent problématiques : Sauf indication contraire, les symboles de la colonne Caractère , et des interpréteurs de commandes Unix exigent que certains caractères, tels que les espaces, <, >, |, \ et parfois :, (, ), &, ;, #, ainsi que les caractères génériques tels que ? et *, soient placés entre guillemets ou échappés . Le caractère 86-DOS et MS-DOS/PC DOS 1.x-2.x, mais peut être utilisé dans les versions ultérieures. Dans les utilitaires Windows, l'espace et le point ne sont pas autorisés en fin de nom de fichier. Le point est autorisé en début de nom, mais certaines applications Windows, comme l'Explorateur Windows , interdisent la création ou le renommage de tels fichiers (bien que cette convention soit utilisée dans les systèmes de type Unix pour désigner les fichiers et répertoires cachés ). Pour contourner ce problème, il est possible d'ajouter un point lors du renommage (ce point est ensuite automatiquement supprimé), d'utiliser un gestionnaire de fichiers alternatif , de créer le fichier en ligne de commande ou d'enregistrer le fichier sous le nom souhaité depuis une application. Certains systèmes de fichiers d'un système d'exploitation donné (en particulier ceux initialement implémentés sur d'autres systèmes d'exploitation), ainsi que certaines applications de ce système d'exploitation, peuvent appliquer des restrictions et des interprétations supplémentaires. Consultez la section « Comparaison des systèmes de fichiers » pour plus de détails sur ces restrictions. Dans les systèmes de type Unix, DOS et Windows, les noms de fichiers « . » et « .. » ont une signification particulière (respectivement répertoire courant et répertoire parent). Windows 95/98/ME utilise également des noms comme « ... », « .... », etc., pour désigner les répertoires grands-parents ou arrière-grand-parents. Toutes les versions de Windows interdisent la création de noms de fichiers composés uniquement de points, alors que les noms comportant trois points (« ... ») ou plus sont autorisés sous Unix. De plus, dans les utilitaires Windows et DOS, certains mots sont également réservés et ne peuvent pas être utilisés comme noms de fichiers. Par exemple, les fichiers de périphériques DOS : Les systèmes qui présentent ces restrictions entraînent des incompatibilités avec certains autres systèmes de fichiers. Par exemple, Windows ne pourra pas gérer, ou signalera des erreurs pour, les noms de fichiers UNIX légaux suivants : aux.c, q"uote"s.txt ou NUL.txt. Les noms de fichiers NTFS utilisés en interne incluent :Personnage Nom Motif de l'interdiction /sabrer Utilisé comme séparateur de composants dans les noms de fichiers sous Unix, Windows et Amiga. (Tant que le paramètre SwitChar est défini sur COMMAND.COM l'interprète comme un caractère de commutation, mais DOS et Windows l'acceptent toujours comme séparateur au niveau de l'API.) La barre oblique point de code Unicode U+29F8) est autorisée dans les noms de fichiers sous Unix et Windows. \barre oblique inverse Utilisé comme séparateur par défaut des composants du nom de chemin sous DOS, OS/2 et Windows (même si le caractère de changement est défini sur « - » ; autorisé dans les noms de fichiers Unix, voir la note 1 ). La barre oblique inversée point d'interrogation Utilisé comme caractère générique sous Unix, Windows et AmigaOS ; désigne un seul caractère. Autorisé dans les noms de fichiers Unix (voir la note 1 ). Le coup de glotte interrogation point d'interrogation inversé pour cent Utilisé comme caractère générique dans RT-11 ; désigne un seul caractère. Sans particularité sous Windows. *astérisque ou étoile Utilisé comme caractère générique sous Unix, DOS, RT-11, VMS et Windows. Il désigne toute séquence de caractères (Unix, Windows, DOS) ou toute séquence de caractères dans le nom de fichier ou l'extension (donc la note 1 ). Voir l'astérisque (graphème) pour la liste des caractères similaires autorisés dans les noms de fichiers.:côlon Utilisé pour déterminer le point de montage/lecteur sous Windows ; utilisé pour déterminer le périphérique virtuel ou physique (tel qu'un lecteur) sous AmigaOS, RT-11 et VMS ; utilisé comme séparateur de chemin d'accès sous Mac OS classique . Doublé après un nom sous VMS, il indique le nom de nœud DECnet (équivalent à un nom d'hôte NetBIOS [réseau Windows] précédé d'un point flux de données alternatif du fichier principal. La lettre deux-points symbole de rapport Segoe UI , utilisée par l' Explorateur Windows , les glyphes du deux-points et de la lettre deux-points sont identiques.|barre verticale ou tuyau Désigne le pipeline logiciel sous Unix, DOS et Windows ; autorisé dans les noms de fichiers Unix, voir Note 1. L' opérateur mathématique divise guillemets doubles droits Une restriction héritée de DOS. Les guillemets simples (U+201C) et guillemet droit (U+201D) sont autorisés dans tous les noms de fichiers. Voir la note 1 . <moins que Utilisé pour rediriger l'entrée , autorisé dans les noms de fichiers Unix, voir Note 1. La lettre de modification d'espacement flèche gauche supérieur à Utilisé pour rediriger la sortie , autorisé dans les noms de fichiers Unix, voir Note 1. La lettre de modification d'espacement flèche droite point ou point Sous Windows, les noms de répertoires ne peuvent pas se terminer par un point, mais ils peuvent se terminer par un point suivi d'un espace insécable . Ailleurs, le point est autorisé, mais sa dernière occurrence sera interprétée comme le séparateur d'extension sous VMS, DOS et Windows. Sous d'autres systèmes d'exploitation, le point est généralement considéré comme faisant partie du nom de fichier, et plusieurs points peuvent être autorisés. Sous Unix, un point en début de nom indique que le fichier ou le répertoire est normalement caché. ,virgule Autorisé, mais traité comme un séparateur par les interpréteurs de ligne de commande COMMAND.COM et CMD.EXE sous DOS et Windows. ;point-virgule Autorisé, mais traité comme un séparateur par les interpréteurs de commandes Bourne shell (et compatibles) et C shell (et compatibles) sur les systèmes de type Unix, et COMMAND.COM et CMD.EXE sur DOS et Windows. Voir la note 1 . =signe égal Autorisé, mais traité comme un séparateur par les interpréteurs de ligne de commande COMMAND.COM et CMD.EXE sous DOS et Windows. espace Autorisé, mais l'espace est également utilisé comme séparateur de paramètres dans les applications en ligne de commande ; voir la note 1 . five\ and\ six\<seven(exemple d'échappement) 'five and six<seven'ou "five and six<seven"(exemples de citation)CON, CONIN$, CONOUT$, PRN, AUX, CLOCK$, NUL COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9 LST (uniquement sous 86-DOS et DOS 1.xx) KEYBD$, SCREEN$ (uniquement en mode multitâche MS-DOS 4.0 ) $IDLE$ (uniquement dans Concurrent DOS 386 , Multiuser DOS et DR DOS 5.0 et versions ultérieures) CONFIG$ (uniquement sous MS-DOS 7.0-8.0)
$Mft, $MftMirr, $LogFile, $Volume, $AttrDef, $Bitmap, $Boot, $BadClus, $Secure, $Upcase, $Extend, $Quota, $ObjId et $Reparse
Comparaison des limitations de nom de fichier
" ; DOS 1/2 interdit le code 0xE5 comme premier caractère*/:<>?\AVAILDEVétat, partout ou uniquement dans \DEV\le répertoire virtuel", *, /, :, <, >, ?, \,exFATUTF-16 Interdit les codes 0 à 31, ", *, /, :, <, >, ?, \,NTFS (sous Windows)UTF-16 Interdit les codes 0 à 31, ", *, /, :, <, >, ?, \,NTFS (espace de noms POSIX)UTF-16 Interdit /et code 0 Jusqu'à 255 caractères :, >,/:sur le disque et le système d'exploitation Mac OS classique ; établit une correspondance entre :les noms de fichiers et les données /sur le disque sous macOS.APFS UNIX (typique)UNIX ( systèmes de fichiers V7 / S3 / S5 ) POSIX (nom de fichier entièrement portable) Système de fichiers MVS classique z/OS (jeux de données) pages de codes EBCDIC Interdit $le code C0 hexadécimal ; le premier caractère doit être alphabétique ou national ( , #, )@-$#@ Jusqu'à 44 caractères /,codes :0 et 255