Quel est le moyen le plus rapide de créer un fichier de 1 Go rempli de zéros en C / C ++?

Je dois créer un énorme fichier binary rempli de zéros dans le système d’exploitation Windows. Sa taille est donnée. Quel est le moyen le plus efficace de le faire en C / C ++?

Essayez d’appeler truncate(2) :

 truncate("/my/file", my_size); 

Pour plus d’informations,

 man 2 truncate 

Les fonctions truncate () et ftruncate () permettent de tronquer le fichier régulier nommé par chemin ou référencé par fd à la taille des octets de longueur.

Si le fichier était auparavant plus grand que cette taille, les données supplémentaires sont perdues. Si le fichier était auparavant plus court, il est étendu et la partie étendue se lit comme des octets nuls (‘\ 0’).

Si vous recherchez la fonction native Windows, jetez un oeil à SetEndOfFile , qui fait beaucoup de même chose.

Si le fichier doit vraiment comporter tous des zéros, il n’y a pas d’autre moyen que d’écrire toutes les données. Je le ferais probablement en utilisant un tampon de la même taille que le bloc de taille de bloc, et l’écrirais en boucle jusqu’à ce que vous écriviez à la taille souhaitée.

Si le fichier peut contenir des “trous” où les données ne sont pas définies (ce qui est déjà sur le disque), vous pouvez rechercher la taille spécifiée et écrire un seul octet.

“Le plus rapide” dépend de la plate-forme. Sous Unix, utilisez les appels système open et write; veillez à appeler write avec un grand tampon (~ 1MB).

Si quelqu’un se demande comment j’ai résolu mon problème ici:

 void CreateBlankFile(LPSTR str, long lsize) { DWORD dwErr; HANDLE file = CreateFile(str, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); dwErr = GetLastError(); if (dwErr > 0) { //some error message should be here return; } SetFilePointer(file, lsize, 0, FILE_BEGIN); SetEndOfFile(file); CloseHandle(file); } 

C’est peut-être ce que vous recherchez, fichier SPARSE . Ces types de fichiers sont généralement créés par des programmes de partage de fichiers …

http://www.flexhex.com/docs/articles/sparse-files.phtml