Je pense que vous êtes confus quant à ce que "longueur de données valides" effectivement signifie. Vérifiez this answer. Fondamentalement, tandis que SetEndOfFile
vous permet d'augmenter la longueur d'un fichier rapidement, et alloue l'espace disque, si vous passez à la (nouvelle) fin de fichier pour y écrire, tout l'espace disque alloué en plus devra être écrasé par des zéros, ce qui est plutôt lent.
SetFileValidData
permet de ignorer cette remise à zéro. Vous dites au système: «Je suis d'accord avec tout ce qui se trouve dans ces blocs de disque, continuez avec ça». (Ceci est la raison pour laquelle vous avez besoin du SE_MANAGE_VOLUME_NAME
privilege, car il pourrait révéler des données priviledged aux utilisateurs non privilégiés si vous ne remplacez pas les données. Les utilisateurs avec ce privilege peuvent accéder aux données d'entraînement brutes de toute façon.)
Dans les deux cas , vous avez défini la nouvelle taille effective du fichier. (Que vous pouvez lire en retour.) Que, exactement, devrait un séparé "lisez le fichier de données valides" rapport? SetFileValidData
dit le système que ce qui est dans ces blocs de disque est « valide » ...
approche différente de l'explication:
Le documentation mentionne que la « longueur de données valides » est étant suivi; le but est que le système sache quelle plage (de la fin de validité des données à la fin du fichier) il doit encore mettre à zéro, dans le contexte de SetEndOfFile
, si nécessaire (par ex. fichier). Vous ne pas besoin de relire cette valeur, car la seule façon qu'il pourrait être différent du fichier réel taille est parce que vous, vous-même, a changé via les fonctions ci-dessus ...
En outre, la "longueur de données valide" typique est la même que la taille réelle du fichier. –
@JoachimPileborg Je ne traite pas du cas typique ... – avim
Curieux, n'allez-vous pas simplement inclure les octets qui existent sur le disque après la fin des données de fichier? – Marichyasana