La vraie question est, à quoi comptez-vous utiliser la taille ?
Votre premièrement Le problème est qu'il y a au moins quatre définitions pour "taille du fichier" :
-
Le décalage de "fin de fichier", qui est le nombre d'octets que vous devez sauter pour aller du début à la fin du fichier.
En d'autres termes, c'est le nombre d'octets logiquement dans le fichier (du point de vue de l'utilisation).
-
La "longueur des données valides", qui est égale à l'offset du premier octet. qui n'est pas réellement stocké .
Elle est toujours inférieure ou égale à la "fin du fichier", et est un multiple de la taille du cluster.
Par exemple, un fichier de 1 Go peut avoir une longueur de données valide de 1 Mo. Si vous demandez à Windows de lire les 8 premiers Mo, il lira les 1 premiers Mo et fera comme si le reste des données était là, en les retournant sous forme de zéros.
-
La "taille allouée" d'un fichier. Elle est toujours supérieure ou égale à la "fin du fichier".
Il s'agit du nombre de clusters que le système d'exploitation a alloué au fichier, multiplié par la taille du cluster.
Contrairement au cas où la "fin du fichier" est supérieure à la "longueur des données valides", les octets excédentaires sont pas considéré comme faisant partie des données du fichier, le système d'exploitation va donc pas remplir un tampon avec des zéros si vous essayez de lire dans la région allouée au-delà de la fin du fichier.
-
La "taille compressée" d'un fichier, qui n'est valable que pour les fichiers compressés (et épars ?).
Elle est égale à la taille d'un cluster, multipliée par le nombre de clusters sur le volume qui sont effectivement alloué à ce fichier.
Pour les fichiers non compressés et non épars, il n'y a pas de notion de "taille compressée" ; vous utiliseriez plutôt la "taille allouée".
Votre deuxième Le problème est qu'un "fichier" comme C:\Foo
peut en fait avoir plusieurs ruisseaux de données.
Ce nom fait simplement référence à la par défaut flux. Un fichier peut avoir alternativement les flux, comme C:\Foo:Bar
dont la taille n'est même pas affichée dans Explorer !
Votre troisième Le problème est qu'un "fichier" peut ont plusieurs noms ("hard links").
Par exemple, C:\Windows\notepad.exe
et C:\Windows\System32\notepad.exe
sont deux noms pour le même fichier. Tout peut être utilisé pour ouvrir tout le flux du fichier.
Votre quatrième Le problème est qu'un "fichier" (ou un répertoire) peut en fait ne pas être un fichier (ou un répertoire) :
Il pourrait s'agir d'un lien souple (un "lien symbolique" ou un "point de repérage") vers un autre fichier (ou répertoire).
Cet autre fichier n'est peut-être même pas sur le même disque. Il peut même pointer vers quelque chose sur le réseau, ou être récursif ! La taille doit-elle être infinie s'il est récursif ?
Votre cinquième est qu'il y a des pilotes "filtres" qui font que certains fichiers ou répertoires regardez comme des fichiers ou des répertoires réels, même s'ils ne le sont pas. Par exemple, les fichiers image WIM de Microsoft (qui sont compressés) peuvent être "montés" sur un dossier à l'aide d'un outil appelé ImageX, et ces fichiers WIM peuvent être "montés" sur un dossier. ne pas ressemblent à des points de repars ou à des liens. Ils ressemblent à des répertoires - sauf qu'ils ne sont pas vraiment des répertoires, et la notion de "taille" n'a pas vraiment de sens pour eux.
Votre sixième Le problème est que chaque fichier nécessite des métadonnées.
Par exemple, le fait d'avoir 10 noms pour le même fichier nécessite plus de métadonnées, ce qui requiert de l'espace. Si les noms de fichiers sont courts, avoir 10 noms peut être aussi économique que d'en avoir 1. S'ils sont longs, avoir plusieurs noms peut utiliser plus d'espace disque. pour les métadonnées . (Même histoire avec les flux multiples, etc.)
Vous les comptez aussi ?