2008-11-19 10 views
11

Intento escribir en un archivo grande, pero parece que no funciona para archivos de más de 2 GB. Lo he intentado con boost :: iostreams :: file_sink. ¿Es solo un límite con el flujo de impulso? ¿Hay alguna otra forma en que pueda escribir un archivo grande en Win64 y Win32?Escribir archivo grande

Respuesta

9

Esto depende de:

  • El sistema de archivos que se está utilizando. Los viejos sistemas de archivos como FAT solo permiten archivos de hasta 2GB. Use NTFS.
  • Su biblioteca debe estar compilada para permitir archivos de gran tamaño (desplazamientos de búsqueda de 64 bits). Si utilizan entradas de 32 bits para buscar en el archivo (compruebe los argumentos y resultados de las llamadas "buscar" y "decir"), solo puede acceder a 2 GB (2^31 bits, el 32 es el signo +/-)

Esto también podría ayudar a: http://www.boost.org/doc/libs/1_37_0/libs/iostreams/doc/faq.html#offsets

+0

"Thirtytwoth"? Simplemente no pude evitarlo :) – korona

+0

"Estamos hablando de gramática aquí, el sentido es otro problema" - No recuerdo dónde lo leí. –

+0

Gracias :) offset_to_position encontrado en su enlace hizo el truco – user38941

5

En Win32/64, la escritura de archivo ReadFile & puede escribir archivos de más de 4GB. El posicionamiento se realiza a través de un valor _LARGE_INTEGER de 64 bits en SetFilePointerEx. Del mismo modo, para obtener el tamaño de archivo, necesita GetFileSizeEx y no el GetFileSize básico.

1

En NTFS, el único límite real es el tamaño del volumen. Si desea probar esto puede crear un archivo de prueba usando la línea de comandos:
fsutil archivo createnew [nombre de archivo] [validdatalength]
Ex:
fsutil archivo TestFile.bin createnew 65536000000
Esto debería crear un 64GB archivo suponiendo que tiene un volumen NTFS.

+0

Nunca supe de fsutil. ¡Gracias! – Ferruccio

Cuestiones relacionadas