ofstream o rename fallan
Bueno la verdad es que no se me ocurria otro titulo. El caso es que estoy liado siguiendo aprendiendo cosas y estoy creando una mini clase la cual hace cosas basicas con archivos secuenciales pero el metodo Delete de mi clase me da problemas. Este es el codigo:
Código PHP:
¿Pueden ayudarme? |
Hola.
Desconozco el por que del cálculo de los bloques para borrar un registro de manera secuencial. Pero, básicamente un borrado de ese tipo consiste en crear un archivo temporal, para luego recorrer el archivo original e ir copiando al temporal los elementos diferentes al que debe ser borrado. Por último se borra el archivo original y se renombra al archivo temporal como el original. Básicamente sería algo similar a este ejemplo: Código PHP:
Código PHP:
Saludos :) |
Lo de los bloques es para no tener que ir copiando estructura por estructura, o sea obtengo la posición del dato que quiero buscar y a partir de esa dirección obtengo el número de bytes que hay desde el inicio hasta esa posición y lo mismo para lo que hay después. Con eso hago solo dos write y me ahorro tener que recorrer todo el archivo leyendo y escribiendo dato a dato.
Lo que dices de "hacerlo de forma aleatoria" ¿que es eso? |
|
Ya entendí aunque tiene algún que otro inconveniente ya que si quiero eliminar un id determinado y no están ordenados ya no sirve este método y si lo están pero no son todos correlativos también habría problemas. Para usarlo tendría que mostrar todos los registros y poner por ejemplo el contador de registros leídos delante de cada registro usando dicho contador para elegir el registro a borrar.
Sigo sin ver el porque no se crea el archivo auxiliar. |
Cita:
Es decir:
Saludos :) |
Misterios de Windows. Cambié el nombre del archivo auxiliar de "aux.dat" a "temp.dat" y ya funciona. Sólo falla con el nombre de archivo "aux.dat". Eso me da que pensar que ha fallado algo en windows y al crear el archivo no permite hacerlo porque intente sobre escribirlo y al no existir pues... no se, son especulaciones. Luego cuando llegue intentare mover todo a otra carpeta y ver que pasa.
|
La franja horaria es GMT +2. Ahora son las 09:21:57. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi