elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Modificar datos en fichero // Algo esta fallando.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Modificar datos en fichero // Algo esta fallando.  (Leído 1,962 veces)
gastongaston

Desconectado Desconectado

Mensajes: 10



Ver Perfil
Modificar datos en fichero // Algo esta fallando.
« en: 3 Octubre 2018, 17:49 pm »

Hola!
Estoy haciendo una agenda en donde tengo un indice que esta siempre cargado en memoria (un map) y luego la agenda propiamente dicha, grabada en un .txt.
Hasta ahi va todo bien, puedo guardar y ver todo lo que ingrese.

El problema surge cuando quiero modificar uno de estos datos.

En el .txt grabo 4 elementos:
un int, que seria el numero del indice en la agenda.
y 3 char[] (nombre, apellido y telefono).

Cuando quiero modificar registros, en vez de modificar los registros especificos, me "crea" nuevos registros al final del archivo.
Estoy totalmente perdido.

Gracias de antemano y espero que me puedan ayudar.
Saludos.

Código
  1. void modificarContacto(int cantidad, int auxRef) {
  2.  
  3. ifstream leerBuscar;
  4. leerBuscar.open("agenda.txt", ios::in);
  5. if (leerBuscar.fail()) {
  6. cout << "\nSe ha producido un error grave en leerBuscar (de modificarContacto).\n";
  7. }
  8.  
  9. char aux1[20], aux2[20], aux3[20];
  10. int intaux, posicion;
  11.  
  12. cout << endl;
  13. cout << "\nposicion antes de entrar en el for -- leerBuscar" << leerBuscar.tellg() << "   " << endl;
  14. for (int i = 0; i < cantidad; i++) {
  15. cout << "\nposicion en el for antes intaux-- leerBuscar" << leerBuscar.tellg() << "   " << endl;
  16. leerBuscar >> intaux;  //ref
  17. if (intaux == auxRef) {
  18. posicion = leerBuscar.tellg();
  19. }
  20. cout << "\nposicion en el for antes aux1-- leerBuscar" << leerBuscar.tellg() << "   " << endl;
  21. leerBuscar >> aux1;   //nombre
  22. cout << "\nposicion en el for antes aux2-- leerBuscar" << leerBuscar.tellg() << "   " << endl;
  23. leerBuscar >> aux2;  //ape
  24. cout << "\nposicion en el for antes aux3-- leerBuscar" << leerBuscar.tellg() << "   " << endl;
  25. leerBuscar >> aux3; //tel
  26. }
  27.  
  28. leerBuscar.seekg(posicion);
  29. leerBuscar >> aux1;
  30. leerBuscar >> aux2;
  31. leerBuscar >> aux3;
  32.  
  33. leerBuscar.close();
  34. ///ahora con la posicion, "posicionamos" al escritura.
  35. ofstream writeBuscar;
  36. writeBuscar.open("agenda.txt", ios::app);
  37. if (writeBuscar.fail()) {
  38. cout << "\nERROR GRAVE EN WRITEBUSCAR dentro de modificarcontacto\n";
  39. }
  40. writeBuscar.seekp(posicion);
  41. cout << "\ntellp de write buscar: " << writeBuscar.tellp() << endl;
  42. //aca ya estaria en la posicion deseada.
  43. char opc;
  44.  
  45.  
  46. do {
  47. cout << "\nEl nombre guardado es: " << aux1 << endl;
  48. cout << "\nDesea modificar el nombre? ";
  49. cout << " (s)   /   (n)" << endl;
  50. cout << " ----> ";
  51. cin >> opc;
  52. if ((opc == 's') || (opc == 'S')) {
  53. cout << "\ntellp de write buscar antes de modificar nombre: " << writeBuscar.tellp() << endl;
  54. cout << "\nNuevo nombre: ";
  55. cin.ignore();
  56. cin.getline(aux1, 20, '\n');
  57. writeBuscar << aux1 << '\n';
  58. cout << "\nNombre modificado con exito.\n";
  59. cout << "\ntellp de write buscar despues de modificar nombre: " << writeBuscar.tellp() << endl;
  60. }
  61. else {
  62. if ((opc != 'n') && (opc != 'N') ){
  63. cout << "\nOpcion Invalida. Ingrese 's' para SI o 'n' para NO.\n";
  64. }
  65. }
  66. } while ((opc != 'n') && (opc != 'N') && (opc != 's') && (opc != 'S'));
  67.  
  68. do {
  69. cout << "\nEl apellido guardado es: " << aux2 << endl;
  70. cout << "\nDesea modificar el apellido? ";
  71. cout << " (s)   /   (n)" << endl;
  72. cout << " ----> ";
  73. cin >> opc;
  74. if ((opc == 's') || (opc == 'S')) {
  75. cout << "\ntellp de write buscar antes de modificar ape: " << writeBuscar.tellp() << endl;
  76. cout << "\nNuevo apellido: ";
  77. cin.ignore();
  78. cin.getline(aux2, 20, '\n');
  79. writeBuscar <<aux2<<'\n';
  80. cout << "\Apellido modificado con exito.\n";
  81. cout << "\ntellp de write buscar dps de modificar ape: " << writeBuscar.tellp() << endl;
  82. }
  83. else {
  84. if ((opc != 'n') && (opc != 'N')) {
  85. cout << "\nOpcion Invalida. Ingrese 's' para SI o 'n' para NO.\n";
  86. }
  87. }
  88. } while ((opc != 'n') && (opc != 'N') && (opc != 's') && (opc != 'S'));
  89.  
  90. do {
  91. cout << "\nEl telefono guardado es: " << aux3 << endl;
  92. cout << "\nDesea modificar el telefono? ";
  93. cout << " (s)   /   (n)" << endl;
  94. cout << " ----> ";
  95. cin >> opc;
  96. if ((opc == 's') || (opc == 'S')) {
  97. cout << "\nNuevo telefono: ";
  98. cin.ignore();
  99. cin.getline(aux3, 20, '\n');
  100. writeBuscar << aux3 << '\n';
  101. cout << "\Telefono modificado con exito.\n";
  102. }
  103. else {
  104. if ((opc != 'n') && (opc != 'N')) {
  105. cout << "\nOpcion Invalida. Ingrese 's' para SI o 'n' para NO.\n";
  106. }
  107. }
  108. } while ((opc != 'n') && (opc != 'N') && (opc != 's') && (opc != 'S'));
  109.  
  110. writeBuscar.close();
  111. }
  112.  


« Última modificación: 3 Octubre 2018, 17:51 pm por gastongaston » En línea

Perdon por tan poco.
gastongaston

Desconectado Desconectado

Mensajes: 10



Ver Perfil
Re: Modificar datos en fichero // Algo esta fallando.
« Respuesta #1 en: 4 Octubre 2018, 10:54 am »

Creo que me di cuenta que lo más lógico (aunque dudo que sea lo más eficiente) sería ir leyendo y grabando en un fichero "temporal" todo lo que encuentro, hasta que se cumple la condicion y ahi, se graba en el fichero temporal lo "nuevo" y, posteriormente, se renombra.

Es posible hacer esto? es decir, borrar un archivo desde codigo de c++ y renombrar otro? (el temporal).

Saludos.


En línea

Perdon por tan poco.
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Modificar datos en fichero // Algo esta fallando.
« Respuesta #2 en: 4 Octubre 2018, 13:56 pm »

Renombrar:
https://www.tutorialspoint.com/c_standard_library/c_function_rename.htm

Eliminar:
https://www.tutorialspoint.com/c_standard_library/c_function_remove.htm
En línea

gastongaston

Desconectado Desconectado

Mensajes: 10



Ver Perfil
Re: Modificar datos en fichero // Algo esta fallando.
« Respuesta #3 en: 4 Octubre 2018, 16:29 pm »

Gracias!
En línea

Perdon por tan poco.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Esta fallando el foro?
Sugerencias y dudas sobre el Foro
BenRu 9 4,104 Último mensaje 4 Abril 2006, 22:42 pm
por aNexos
¡No tengo internet! ¿Qué está fallando?
Noticias
wolfbcn 0 1,453 Último mensaje 30 Diciembre 2011, 22:46 pm
por wolfbcn
Mi router esta fallando
Redes
franfis 9 8,198 Último mensaje 4 Julio 2013, 01:14 am
por virtualedu
tengo problemas con mi programa no puedo modificar ni eliminar datos del fichero
Programación C/C++
Darkestnazgul 8 3,838 Último mensaje 29 Diciembre 2015, 12:11 pm
por MAFUS
[java] Método modificar sobre datos en un fichero
Java
silk_25 2 3,919 Último mensaje 13 Febrero 2023, 21:28 pm
por rub'n
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines