Lors de la copie de fichiers clairsemés à l'aide de io.Copy(), ils gonflent souvent considérablement en taille à la destination.
io.Copy() transfère les octets bruts, ce qui masque la présence de trous dans un fichier clairsemé - les espaces où aucune donnée réside réellement. Ces informations ne sont pas accessibles via des appels système standard comme read(2). En tant que tel, io.Copy() est incapable de préserver la rareté des fichiers.
Pour résoudre ce problème, nous devons approfondir l'utilisation du package syscall et de la gestion manuelle. Les appels système Lseek(2), avec des valeurs spéciales SEEK_HOLE et SEEK_DATA, peuvent être utilisés pour manipuler des trous dans les fichiers.
Si vous souhaitez conserver la rareté d'un fichier lors du transfert, la situation est plus complexe. Fallocate(2) peut être utilisé pour tenter de créer des trous sur les systèmes de fichiers pris en charge. Cependant, certains systèmes de fichiers ne prennent pas en charge les trous, comme la famille FAT.
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!