C'est bien d'être curieux, ça nous permet d'apprendre plus de chose.
Alors en éditant le fichier avec un éditeur hexadécimal, je vous confirme qu'il est 'remplit de zéro' (hex(00)) mais qui correspondent au caractère NUL.
Le
FileWrite($hFile, 0) après le
FileSetPos permet de rajouter le nombre 0 (hex(32)) à la fin du fichier.
Cela pourrait être n'importe quel caractère autre que le caractère NUL, car pour valider le déplacement de l'offset, il faut autre chose qu'un caractère NUL.
En ce qui concerne le remplissage par Hex(00), cela ne change rien au fait que le fichier contient quand même quelque chose, car même si vous y mettez que des Hex(32), le fichier aura la même taille. ^^
En ce qui concerne le -1, vous pouvez en faire abstraction.
Mais pour votre connaissance, le but était de faire en sorte que la valeur de la taille du fichier corresponde à un multiple de 1024.
Prenons pour exemple ce code :
Code : Tout sélectionner
FileSetPos($hFile, (1024*1024), $FILE_BEGIN)
FileWrite($hFile, 0)
Je vais me retrouver avec un fichier ayant pour taille 1024*1024+1=1 048 577 (le 1 correspond au caractère 0 que je rajoute à la fin

).
Or en informatique c'est 1 048 576 qui est un multiple de 1024.
Voici ce qu'en dit le Wikipédia :
1 048 576 octets valent un mébioctet (1 Mio) ou 1 MiB.
Ce nombre est lié à la mémoire adressable en mode réel segmenté d'un PC tournant sous MS-DOS, qui possédait au final un bus d'adresse 20 bits (4 bits de segment et 16 bits d'offset).
En binaire, ce nombre s'écrit 100000000000000000000, et en hexadécimal 100000.
Voilà, j'espère cette fois-ci que vous avez tous les éléments.
