Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: raquelsg88 en 12 Julio 2013, 09:53 am



Título: escribir fichero txt continuamente
Publicado por: raquelsg88 en 12 Julio 2013, 09:53 am
Hola,

Escribo un fichero txt en lenguaje C, concretamente el fichero está en una memoria USB y quiero que este escribiendose continuamente y que cuando el fichero esté lleno empiece a escribir desde el principio, sobreescribiendo lo que hubiera.

res = R_tfat_f_open(&file, "prueba.txt", (TFAT_FA_READ | TFAT_FA_WRITE));
         if(fichero_lleno==1){
                  res = R_tfat_f_lseek(&file,0);
                  fichero_lleno=2;
               }
         else res = R_tfat_f_lseek(&file,file.fsize);

            for(i=0;i<4096;i++)
                  {
                     usb_gBuf = 0x62;     
                  }
                        
                  /* Write the data-set to a file. */
                  res = R_tfat_f_write(&file, usb_gBuf, sizeof(usb_gBuf), &file_rw_cnt);
               R_tfat_f_sync(&file);
               if(( res == TFAT_FR_RW_ERROR)||(file_rw_cnt==0)){
                  fichero_lleno=1;
               }

Abro el fichero y escribo 4096 caracteres, cuando se llena le digo que el cursor se ponga al principio, pero claro, me escribe los 4096, pero el fichero sigue lleno y todo el rato me escribe solo 4096 y yo lo que quiero es que el cursor vaya avanzando.

Alguien tiene una idea de como hacer esto?

Gracias!


Título: Re: escribir fichero txt continuamente
Publicado por: eferion en 12 Julio 2013, 10:58 am
Cuando tu estás escribiendo en un archivo, por defecto, el sistema lo trata igual que si fuese un buffer de memoria.

Cuando tu escribes en un buffer de memoria, el sistema crea un puntero que apunta a una posición concreta del buffer, de tal forma que cuando inicias operaciones de lectura o escritura, éstas se realizan a partir de esa posición.

Bueno, también puede darse el caso de que se utilicen dos punteros independientes, uno para la lectura y otro para la escritura.

La posición de éstos punteros, normalmente, se determina de forma relativa con respecto al inicio del buffer.

Con esta información, lo que podrías hacer es lo siguiente:

Lee la posición del puntero para saber si has llegado al final del archivo.

Cuando hayas llegado al final posiciona el puntero de nuevo en el principio del archivo y continúa con tu escritura.

Código
  1. // Posiciona el puntero al inicio del archivo
  2. fseek( &file, 0, SEEK_SET );
  3.  
  4. // Obtiene la posición del puntero
  5. long pos = ftell( &file );