Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: arturo2507 en 23 Noviembre 2018, 21:52 pm



Título: Cargar archivo binario(No lee los caracteres de la cadena)
Publicado por: arturo2507 en 23 Noviembre 2018, 21:52 pm
"UTILIZO LENGUAJE VISUAL STUDIOS 2017 C++". Holo muy buenas, aquí traigo un código en el cual se basa en cargar los elementos agregados a un archivo binario y esta siendo trabajado en un proyecto de winapi,en este archivo se guardan todos los datos de una estructura llamada Contacto y EL ERROR ORCURRE cuando se empiezan a cargar los datos del contacto y me detiene justo en el punto donde marque en el código y me dice que no se pueden leer los caracteres de la cadena, otro dato que puedo ofrecerles sobre el error es que al parecer el programa me sigue introduciendo datos "basura", bueno realmente me deja como espacios vacíos en cada dato y los toma como si fueran algún otro elemento de mi lista aquí también dejare el código que uso para guardar los datos del contacto, espero y puedan ofrecerme su ayuda, gracias.

Código
  1. void GuardarContacto(HWND hDlg) {
  2.  
  3. aux = origen;
  4. ofstream Archivo;
  5.  
  6. Archivo.open(
  7. "C:\\Users\\artur\\OneDrive\\Documentos\\Visual Studio 2017\\Projects\\Proyecto Final Programacion 2\\Proyecto Final Programacion 2\\MisContactos.bin",
  8. ios::trunc | ios::out | ios::binary);
  9.  
  10. if (Archivo.is_open()) {
  11.  
  12. while (aux != NULL) {
  13. Archivo.write(reinterpret_cast<char *>(aux), sizeof(Contacto));
  14. aux = aux->sig;
  15. }
  16. Archivo.close();
  17. return;
  18. }
  19. else {
  20. MessageBox(hDlg, "No se pudo abrir el archivo", "ERROR", MB_ICONERROR | MB_OK);
  21. }
  22. return;
  23. }
  24.  
  25. void CargarContacto(HWND hDlg) {
  26.  
  27. aux = origen;
  28. ifstream Archivo;
  29.  
  30. Archivo.open(
  31. "C:\\Users\\artur\\OneDrive\\Documentos\\Visual Studio 2017\\Projects\\Proyecto Final Programacion 2\\Proyecto Final Programacion 2\\MisContactos.bin",
  32. ios::binary | ios::in);
  33.  
  34.  if (Archivo.is_open()) {
  35. while (!Archivo.eof()) {
  36. if (origen == NULL) {
  37. origen = new Contacto;
  38. Contacto *temp = new Contacto;
  39. Archivo.read(reinterpret_cast<char*>(temp), sizeof(Contacto));
  40. origen->Nombre = temp->Nombre;
  41. origen->Apellido = temp->Apellido;
  42. origen->Calle = temp->Calle;
  43. origen->EntreCalles = temp->EntreCalles;
  44. origen->Correo = temp->Correo;
  45. origen->Colonia = temp->Colonia;
  46. origen->Municipio = temp->Municipio;
  47. origen->Estado = temp->Estado;
  48. origen->Pais = temp->Pais;
  49. origen->NumTelefono = temp->NumTelefono;
  50. origen->NumCP = temp->NumCP;
  51. strcpy(origen->Foto1, temp->Foto1);
  52. strcpy(origen->Foto2, temp->Foto2);
  53. origen->ant = NULL;
  54. origen->sig = NULL;
  55. delete reinterpret_cast<char*>(temp);
  56. continue;
  57. }
  58. aux = origen;
  59. while (aux->sig != NULL)
  60. aux = aux->sig;
  61. aux->sig = new Contacto;
  62. Contacto *temp = new Contacto;
  63. Archivo.read(reinterpret_cast<char*>(temp), sizeof(Contacto));
  64. aux->sig->ant = aux;
  65. aux->sig->sig = NULL;
  66. aux = aux->sig;
  67. aux->Nombre = temp->Nombre;
  68. aux->Apellido = temp->Apellido;
  69. aux->Calle = temp->Calle;
  70. aux->EntreCalles = temp->EntreCalles;
  71. aux->Correo = temp->Correo;
  72. aux->Colonia = temp->Colonia;
  73. aux->Municipio = temp->Municipio;
  74. aux->Estado = temp->Estado;
  75. aux->Pais = temp->Pais;
  76. aux->NumTelefono = temp->NumTelefono;
  77. aux->NumCP = temp->NumCP;
  78. strcpy(aux->Foto1, temp->Foto1);
  79. strcpy(aux->Foto2, temp->Foto2);
  80. delete reinterpret_cast<char*>(temp);
  81. //Justo en delete reinterpret_cast<char*>(temp); ocurre el error por lo que les mencione antes.
  82. }
  83. Archivo.close();
  84. return;
  85. }
  86.    //MessageBox(hDlg, "No pueden cargarse los contactos", "ERROR", MB_ICONERROR | MB_OK);
  87. return;
  88. }


Título: Re: Cargar archivo binario(No lee los caracteres de la cadena)
Publicado por: AlbertoBSD en 24 Noviembre 2018, 00:28 am
No te deja hacer el delete directamente?

Código:
delete(temp);

Y como comentario no existe tal cosa como LENGUAJE VISUAL STUDIOS 2017 C++.
Es C o C++.
Ya aparte mencionar el IDE en este caso se entiende que es Visual Studio.

Saludos!