Foros del Web » Programación para mayores de 30 ;) » C/C++ »

No puedo escribir en archivo correctamente

Estas en el tema de No puedo escribir en archivo correctamente en el foro de C/C++ en Foros del Web. Hola amigos, estoy intentando crearme una funcion que escriba en la posicion deseada de un archivo y para ello he probado esto: Código PHP: void SendToFile  ...
  #1 (permalink)  
Antiguo 08/01/2018, 07:39
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 9 meses
Puntos: 3
No puedo escribir en archivo correctamente

Hola amigos, estoy intentando crearme una funcion que escriba en la posicion deseada de un archivo y para ello he probado esto:
Código PHP:
void SendToFile (bytesentenceint sizeuint32_t poschar *path) {
    
std::ofstream ostr (path);
    if (
ostr) {
        
std::streambuf pbuf ostr.rdbuf();
        
//Aqui obtengo el tamaño del archivo
        
std::streamsize sizeStream pbuf->pubseekoff(0ostr.end);
        
//Me posiciono en el lugar donde quiero escribir en el archivo
        
pbuf->pubseekoff(posostr.beg);
        
//Escribo lo que quiero en el archivo usando el stream
        
pbuf->sputn (sentence,size);
        
ostr.close();
    }

Y tambien esto:
Código PHP:
void SendToFile (bytesentenceint sizeuint32_t poschar *path) {
    
std::ofstream ostr (path);
    if (
ostr) {
        
//Obtengo el tamaño del archivo
        
ostr.seekp(0,ios_base::end);
        
int size_file=ostr.tellp();
        
//Me posiciono en la posicion del archivo donde quiero escribir
        
ostr.seekp(pos,ios_base::beg);
        
//Escribo en el archivo lo que quiero
        
ostr.write(sentence,size);
        
ostr.close();
    }

En ambos casos el tamaño del archivo que obtengo es 0 pero no lo es, ni mucho menos, aunque cuando escribo en el si que obtengo un archivo en el que solo está lo que he escrito. ¿Alguien me puede ayudar?
  #2 (permalink)  
Antiguo 11/01/2018, 22:10
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Respuesta: No puedo escribir en archivo correctamente

Es por el modo de apertura, debe ser in|out.
Código C++:
Ver original
  1. std::ofstream ostr (path);                                                           //Sobreescribe el archivo original caso existir, similar a al modo "W" de C
  2. std::ofstream ostr (path, std::ofstream::out|std::ofstream::trunc );                 //Equivale al modo anterior porem de forma implicita, similar a al modo "W" de C
  3. std::ofstream ostr (path, std::ofstream::in|std::ofstream::out );                    //Altera datos al fichero existente, lo hace al principio,, similar a al modo "r+" de C. Bueno si lo que quieres es moverte pelo fichero con seekg o seekp.
  4. std::ofstream ostr (path, std::ofstream::in|std::ofstream::out|std::ofstream::app ); //Altera datos al fichero existente, los nuevos datos seran adicionados al final, similar a al modo "a" de C. De poca ayuda si lo que quieres es alterar datos en el fichero ya que no permite usar seekp o seekg, pues los datos siempre seran inseridos al final del fichero, mismo que intentes mover el puntero, los datos iran a parar al final del archivo.
  #3 (permalink)  
Antiguo 11/01/2018, 22:11
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Respuesta: No puedo escribir en archivo correctamente

De una mirada aqui: http://en.cppreference.com/w/cpp/io/basic_filebuf/open
  #4 (permalink)  
Antiguo 13/01/2018, 02:27
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 9 meses
Puntos: 3
Respuesta: No puedo escribir en archivo correctamente

Gracias amigo!

Etiquetas: correctamente
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:34.