io.Copy() transfère les octets bruts entre un io.Reader et un io .Écrivain. Cependant, il n'a pas la capacité de gérer l'emplacement des trous dans les fichiers, qui sont considérés comme des informations secondaires que les appels système comme read(2) cachent aux utilisateurs.
Pour gérer fichiers clairsemés, vous devez utiliser le package syscall et manipuler manuellement les paramètres. Les valeurs SEEK_HOLE et SEEK_DATA de lseek(2) sont essentielles pour ce processus.
Le transfert de fichiers clairsemés est plus complexe. Sous Linux, vous pouvez tenter de percer des trous en utilisant fallocate(2) avec FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE. Si cela échoue, écrivez des blocs remis à zéro dans la destination pour encourager le système d'exploitation à les convertir en trou.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!