fondo
archivo grande en la escritura incrementales del proyecto, se encontró con un problema:
fopen : Value too large for defined data type.
De acuerdo con esta solicitud de acceso a la información relevante se muestra:
- Toolchain demasiado viejo: Hass cadena de herramientas que actualmente no puedo encontrar un método de sustitución
- sistema de archivos inde es de 64 bits: Ver el
cat /proc/fs/{文件系统类型}/{设备名}/options
encontró todo normal,
Se ha cambiado el pensamiento y la mirada directa de acuerdo con las necesidades: Linux C leer y escribir archivos de gran tamaño.
Para información aprendida
entorno Linux por defecto, leer y escribir más de presentar declaraciones 2G un error.
Se define como macros pueden romper este límite, válido tanto para lectura / escritura y fread / fwrite.
Tenga en cuenta que se debe definir antes de que todos los archivos de cabecera.
#define _LARGEFILE_SOURCE
#define _LARGEFILE64_SOURCE
#define _FILE_OFFSET_BITS 64
fseek tema del acceso al tamaño de archivo más grande que 4G
reproducida Feng ciruela Último mensaje el 23/06/2015 23:30:50 lectura número 3154 colección
lanzada
Recientemente encontrado con problemas para obtener el tamaño del archivo, ya que en todas partes para encontrar el problema, y finalmente me di cuenta de que hay un problema a la hora de obtener el tamaño del archivo. Más cerca de casa:
tamaño de archivo previamente adquirido es el momento para hacerlo:
fseek (fp, 0, SEEK_END);
_length = ftell (fp);
fseek (fp, 0, SEEK_SET);
En circunstancias normales, como esto no es problema, pero parece que cuando la lectura es superior a 3,4 g leído mal la situación, ya sea -1, ya sea _length tipos de datos máximos, en definitiva, es equivocado.
La solución es:
pos fpos_t;
fseek (fp, 0, SEEK_END);
fgetpos (chimenea, y pos);
fseek (fp, 0, SEEK_SET);
pos es el tamaño del archivo, y fpos_t especialmente marcada, este tipo de datos se define en el interior archivo stdio.h
typedef __int64 fpos_t;
Es un sentido tal, como esto no añadiría ninguna librería adicional, o alguna voz en lo API o ventanas pueden ser resueltos!