Soy consciente de que su pregunta está etiquetada con Windows, y Brian R. Bondy le dio la mejor respuesta a su pregunta si sabe con certeza que no tendrá que transferir su aplicación a otras plataformas. Sin embargo, si tiene que portar su aplicación a otras plataformas, puede hacer algo más parecido a lo que Adrian Cornish propuso como respuesta a la pregunta "¿Cómo crear un archivo de tamaño" x "?" encontrado en How to create file of "x" size?.
FILE *fp=fopen("myfile", "w");
fseek(fp, 1024*1024, SEEK_SET);
fputc('\n', fp);
fclose(fp);
Por supuesto, hay un toque adicional. La respuesta propuesta por Adrian Cornish hace uso de la función fseek que tiene la siguiente firma.
int fseek (FILE * stream, long int offset, int origin);
El problema es que desea crear un archivo muy grande, con un tamaño de archivo que está más allá del alcance de un entero de 32 bits. Necesitas usar el equivalente de 64 bits de fseek. Desafortunadamente, en diferentes plataformas tiene diferentes nombres.
El archivo de cabecera LargeFileSupport.h encontrado en http://mosaik-aligner.googlecode.com/svn-history/r2/trunk/src/CommonSource/Utilities/LargeFileSupport.h ofrece una solución a este problema.
Esto le permitiría escribir la siguiente función.
#include "LargeFileSupport.h"
/* Include other headers. */
bool createLargeFile(const char * filename, off_type size)
{
FILE *fp = fopen(filename, "w");
if (!fp)
{
return false;
}
fseek64(fp, size, SEEK_SET);
fputc('\n', fp);
fclose(fp);
}
Pensé que podría agregar esto en caso de que la información te sea útil.
Probado, funciona como se esperaba gracias Brian. – Ilya
Esto funcionará rápido solo en NTFS y exFAT, no en FAT32, FAT16 .. Esto se debe a que este sistema de archivos tiene un "tamaño inicializado" –
'SetEndOfFile()' puede provocar retrasos graves al escribir en el archivo. Si escribe en el medio del archivo, Windows pondrá a cero todos los bloques que aún no se han escrito, hasta la ubicación de la escritura. Consulte http://blogs.msdn.com/b/oldnewthing/archive/2011/09/22/10215053.aspx (Y personalmente puedo confirmar esto. He sido testigo del efecto al escribir una aplicación de evaluación comparativa IO). –