C/Visual C - Duda al volcar un fichero muy grande

 
Vista:
sin imagen de perfil

Duda al volcar un fichero muy grande

Publicado por Ángel (19 intervenciones) el 25/07/2017 21:30:40
Hola buenas, tengo un problema al leer en c un fichero y quería alguna idea:
El problema que tengo es; estoy trabajando en un programa en c en el que a través de read() estoy leyendo el fichero, y lo estoy volcando en un vector, lo que pasa es que el fichero que leo es muy muy grande, puede tener hasta 4 gb, y el vector no me deja hacerlo tan grande, me da error.
Queria saber como lo puedo hacer, si hay en C alguna opcion como vectores infinitos y cosas asi, habia pensado en la funcion malloc() para reservar memoria dinamicamente pero no lo se.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Duda al volcar un fichero muy grande

Publicado por Tom (619 intervenciones) el 26/07/2017 08:52:50
1.- Define qué entiendes por vector
2.- ¿ Por qué crees que necesitas mantener todo el fichero en memoria ?
3.- Si es necesario, usa mmap()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Duda al volcar un fichero muy grande

Publicado por Ángel (19 intervenciones) el 26/07/2017 14:35:40
1
2
3
char fichero[205096];
fd[1]=open("1.txt",O_RDONLY);
numdatos2=read(fd[1],fichero,205096);

Esto es lo que tengo, tengo que leer un fichero con read(), lo he hecho asi, no se si hay otra forma.
He puesto ese tamaño por poner uno, pero con ese numero no consigo leer todo, entonces no se como hacerlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Duda al volcar un fichero muy grande

Publicado por Aguml (272 intervenciones) el 29/07/2017 23:53:50
Hazlo por bloques. Por ejemplo un bloque de 1000 bytes cada vez hasta que acabes de copiar todo. Por otro lado eso no es C estándar ya que deberías usar para ello el tipo FILE y las funciones fread, fwrite, fopen, fclose, feof... Busca información de cómo copiar un archivo por bloques y verás qué es bien sencillo y te permite por ejemplo crear una "barra de progreso" simplemente calculando cuantos bloques caben en el archivo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar