Réponse simple: Parce que c'est défini comme ça.
Réponse plus longue: il est défini ainsi car certaines opérations sont conceptuellement plus simples:
- Si un fichier contient 20 lettres "A" et que vous supprimez tous les "A", le fichier sera alors 20 octets plus court. La même opération sur un fichier constitué uniquement de "AAAAAAAAAAAAAAAAAAAAAA" devrait traiter du cas particulier d'un fichier en train de disparaître.
- Plus concrètement, la suppression de la dernière ligne d'un fichier texte nécessiterait une casse spéciale.
- Les éditeurs de texte qui effectuent régulièrement une sauvegarde auraient besoin d'un code de cas spécial pour permettre à l'utilisateur de supprimer la dernière ligne, d'aller déjeuner, puis de revenir et d'ajouter une autre ligne. Des complications supplémentaires surviennent si d’autres utilisateurs créent un fichier portant ce nom entre-temps.
Vous pouvez faire plus de choses: * Les fichiers journaux d’erreur sont généralement créés vides, à remplir si et seulement si une erreur se produit. * Pour savoir combien d'erreurs se sont produites, vous comptez le nombre de lignes dans les fichiers journaux. Si le fichier journal est vide, le nombre d'erreurs est égal à zéro, ce qui est parfaitement logique. * Parfois, vous voyez des fichiers contenant tout le texte pertinent dans le nom du fichier, par exemple ou .this-is-the-logging-directory
. Cela empêche les administrateurs trop exigeants de supprimer les répertoires vides après l'installation, ainsi que les erreurs dans lesquelles un programme ou un utilisateur crée accidentellement un fichier dans lequel le programme souhaite voir un répertoire ultérieurement. Le git
programme (et d’autres) ont tendance à ignorer les répertoires vides. Si un projet / administrateur / utilisateur souhaite disposer d’un enregistrement attestant que le répertoire existe même s’il n’a pas (encore) de contenu utile, vous pouvez voir un fichier vide nomméempty
empty.directory
Aucune opération ne devient plus compliquée:
- Concaténer des fichiers: il s’agit simplement d’une opération non-op avec un fichier vide.
- Rechercher une chaîne dans un fichier: ceci est couvert par la casse standard de "si le fichier est plus court que le terme recherché, il ne peut pas contenir le terme recherché".
- Lecture du fichier: les programmes doivent gérer la fin du fichier avant d’obtenir ce à quoi ils s’attendaient. Le cas d’un fichier de longueur nulle n’implique donc pas une réflexion supplémentaire du programmeur: il ne fera que taper à la fin du fichier. -file depuis le début.
Dans le cas des fichiers, l'aspect "il y a un fichier enregistré quelque part" (inode et / ou nom de fichier) s'ajoute aux considérations ci-dessus, mais les systèmes de fichiers ne le feraient pas si les fichiers vides étaient inutiles.
En général, toutes les raisons ci-dessus, à l'exception de celles liées aux noms de fichiers, s'appliquent aux séquences. Plus particulièrement aux chaînes, qui sont des séquences de caractères: Les chaînes de longueur nulle sont courantes dans les programmes. Les chaînes sont généralement interdites au niveau utilisateur si elles n’ont pas de sens: un nom de fichier est une chaîne, et la plupart des systèmes de fichiers n’autorisent pas une chaîne vide en tant que nom de fichier; en interne, lors de la création de noms de fichiers à partir de fragments, le programme peut très bien contenir une chaîne vide.