Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/04/2014, 18:24
jhonny6721
 
Fecha de Ingreso: diciembre-2013
Mensajes: 150
Antigüedad: 10 años, 4 meses
Puntos: 8
Alojar archivo a memoria

Hola, ¿Como están? Tengo el siguiente problema: Yo, he querido leer el contenido de un archivo en memoria y subirlo en memoria para trabajar más fácilmente con él. La función que hace eso, ya la tengo hecha.

Pero resulta, que al generar dinamicamente la memoria necesaria para almacenar cada byte del archivo, y asignarsela al puntero, ocurre algo inusual: No es posible acceder al contenido guardado en el puntero fuera de la función.

Para que por favor puedan solucionar mi problema, les dejo mi codigo fuente:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <fstream>
  3. #include <stdio.h>
  4.  
  5.  
  6. using namespace std;
  7.  
  8. int load_file_in_memory(char *buffer, char path[]);
  9.  
  10. int main(){
  11.     char *buffer;
  12.     char path[] = "C:\\codigo.txt";
  13.  
  14.     load_file_in_memory(buffer, path);
  15.  
  16.     cout << "Accediendo al puntero desde fuera de la funcion: " << endl;
  17.     cout << buffer << endl;
  18. }
  19.  
  20. int load_file_in_memory(char *buffer, char path[]){
  21. /*************************************************************
  22.     CARGA ARCHIVO EN MEMORIA.
  23. *************************************************************/
  24.  
  25.  
  26.     unsigned int size_of_file;
  27.  
  28.     std::ifstream file;
  29.     file.open(path, ios::binary);
  30.  
  31.     ///Siempre verifica que el archivo haya abierto correctamente
  32.     if(file.bad()){
  33.         cout << "Lo siento. Fallo el archivo!!" << endl;
  34.         return -1;
  35.     }
  36.  
  37.     ///Se posiciona en el ultimo byte para obtener tamaño.
  38.     file.seekg(0, ios::end); ///Se va a la úlitma posicion
  39.     size_of_file = file.tellg(); ///Obtiene cual es dicha posicion, es decir la longitud de archivo
  40.     file.seekg(0, ios::beg); ///Va al principio el puntero.
  41.  
  42.  
  43.     buffer = new char[size_of_file];
  44.  
  45.     file.read(buffer, size_of_file);
  46.  
  47.     file.close();
  48.  
  49.     cout << "Mirando el contenido del puntero dentro de la funcion" << endl;
  50.     cout << buffer << endl;
  51.  
  52.  
  53. /*************************************************************
  54.     FIN DE CARGA EN MEMORIA
  55. **************************************************************/
  56.  
  57.  
  58. }

Para que puedan probar el codigo, deberían crear un fichero de prueba, con algún texto. Así podrán observar lo que digo.

Gracias de antemano.
__________________
¿Necesitas ayuda con algún algoritmo? Si tienes dudas, entonces visita: http://algoritmosypseudocodigo.blogspot.com/.