Pregunta

Mi sistema operativo y mi unidad son

OS: Windows XP sp2 or Linux SUSE 9 or Cygwin
Compiler: Visual C++ 2003 or Gcc or Cygwin
PC and os are both 32 bits

Entonces, ¿cómo puedo crear un archivo supergrande en segundos?

Me dijeron que usara las funciones de MappingFile. No pude crear archivos de más de 2G Asi que... Sus cálidas respuestas serán apreciadas gracias

¿Fue útil?

Solución

Usar dd en Linux para crear un archivo de 1 gb toma 57 segundos de "tiempo de reloj de pared" en una caja algo cargada con un disco lento, y aproximadamente 17 segundos de tiempo del sistema:

$ time dd if=/dev/zero of=bigfile bs=G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 53.9903 s, 19.9 MB/s

real    0m56.685s
user    0m0.008s
sys     0m17.113s
$

Otros consejos

puedes usar dd

dd if=/dev/zero of=bigfile.txt bs=$((1024*1024)) count=100

o simplemente las secuencias de comandos de shell y el contenido no importan

1) create a dummy file with a few lines, eg 10 lines
2) use cat dummy >> bigfile in a while loop

eg

    while true
    do
      cat dummy >> bigfile.txt 
      #check for number of lines more than 10000 for example and break out of loop
    done

Haz otra vez

while true
do
  cat bigfile >> bigfile2.txt           
  # check for size and break out..
done
rm -f dummy bigfile

¿El archivo tiene que ocupar espacio en disco real? Si no, siempre podría (en Cygwin o Linux):

dd if=/dev/zero of=bigfile seek=7T bs=1 count=1

Esto creará un archivo vacío de 7 TB en una fracción de segundo. Por supuesto, no asignará mucho espacio en disco real: tendrá un gran archivo disperso .

Al escribir un programa en Cygwin o Linux, puede hacer lo mismo en un programa C con una llamada a ftruncate .

Dependiendo de los límites de su sistema, puede crear un archivo grande en una fracción de segundo ...

FILE *fp = fopen("largefile" ,"w");
for(int i = 0; i < 102400; i++)
{
    fseek(fp, 10240000, SEEK_CUR);
}
fprintf(fp, "%c", 'x');
fclose(fp);

Juega con esto.

cat / dev / urandom > > / home / mybigfile

Se producirá un error cuando se agote el espacio en disco.

Esto es para linux / bsd / posiblemente cgywin

En el caso de una máquina virtual, hice dd if = / dev / zero of = file; rm file que llenó el disco, y cuando estaba lleno borré el archivo. Esto me permitió comprimir la imagen un poco más por alguna razón, y leí sobre hacerlo en un foro en algún lugar.

Puede usar " fsutil " comando para Win2000 / XP / 7:

c: > Archivo fsutil createnew Uso: archivo fsutil createnew    Por ejemplo: archivo fsutil createnew C: \ testfile.txt 1000

Reagrds

Si desea un archivo disperso, puede hacerlo también en Windows (en volúmenes NTFS), utilizando CreateFile, DeviceIOFunction con FSCTL_SET_SPARSE y FSCTL_SET_ZERO_DATA; Para obtener más información, consulte aquí .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top