• Martes 16 de Abril de 2024, 09:59

Autor Tema:  Problema con CStdioFile::WriteString  (Leído 2096 veces)

valentz

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Problema con CStdioFile::WriteString
« en: Lunes 23 de Abril de 2012, 11:31 »
0
Hola, estoy empezando con visual c++ autodidácticamente. He hecho un mini programa en el cual se puede elegir el nombre de un color de una lista o añadir un nuevo color a la lista. Para ello guardo el nuevo color en un archivo. He utilizado el siguiente código
Código: C++
  1.  void CMyFileDlg::OnSave()
  2. {
  3.         // TODO: Add your control notification handler code here
  4.        
  5.         if(m_NewColor)
  6.         {
  7.                 //-------------------------------------------------------------
  8.                 // Writing the New Colors on the file color.dat
  9.                 //-------------------------------------------------------------
  10.  
  11.                 //Creating a storing archive of type CFile / CStdioFile: file
  12.                 CStdioFile file;  
  13.  
  14.                 //Opening the file
  15.                 file.Open("color.dat", CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite | CFile::typeBinary);
  16.  
  17.                 file.SeekToEnd(); // Moving the cursor to the End of the file.
  18.  
  19.                 UpdateData(TRUE); // transferring the content of the edit boxes to the variables
  20.  
  21.                 //Writing the context of each variable
  22.                 //file.WriteString(m_IdColor);
  23.                 //file.WriteString("\b ");
  24.                 file.WriteString(m_ColorName);
  25.                 file.WriteString("\n \n");
  26.  
  27.                 //Closing the file
  28.                 file.Close();
  29.  
  30.                 UpdateData(FALSE);
  31.  
  32.                 AfxMessageBox("Datos guardados correctamente!");
  33.  
  34.         }
  35.        
  36. }

y funciona correctamente si solamente escribo el nombre del color pero si quiero escribir también un número para cada color a través de la variable int m_IdColor me genera el siguiente error:

error C2664: 'CStdioFile::WriteString' : cannot convert parameter 1 from 'int' to 'LPCTSTR'

¿Cómo puedo hacer para que me escriba en el archivo la variable int m_IdColor?  Quiero además que se genere un espacio entre las dos variables m_IdColor y m_ColorName. Si utilizo file.WriteString("\b"); entonces me produce   entre los valores de las dos variables. Entonces ¿Como crearíais un espacio entre los dos datos de las dos variables?

En la función Open indico el nombre del archivo a abrir “color.dat” que lo genera en el mismo directorio donde se encuentra el ejecutable, ¿se puede indicar también el directorio donde se encuentra? ¿Se puede también dar la opción de elegir el directorio donde crear el archivo? Si es así ¿cómo se haría?

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re:Problema con CStdioFile::WriteString
« Respuesta #1 en: Miércoles 25 de Abril de 2012, 14:38 »
0
Desde hace tiempo, Visual C++ funciona con unicode por defecto, por lo que o bien añades una L delante de cada cadena o bien te vas a las opciones del compilador y eliges "not using unicode". Mi recomendación es que añadas un include a tchar.h y luego uses las macros _T() y las funciones genéricas que empiezan con _t para que luego todo colapse en unicode o en ansi según las opciones del compilador.
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog