![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
#1
|
||||
|
||||
¿No limpiarás las variables antes de volver a leerlas?
|
#2
|
||||
|
||||
No. Las inicializo al principio de la función. No quería extenderme en exceso proque hay llamadas a funciones externas y demás, pero este es el código completo que estoy usando:
Código:
void __fastcall TfPersona::FormCreate(TObject *Sender) { BROWSEINFO bi; int nDirectorio = 0; LPITEMIDLIST ItemID; TStringList *slIniFile = new TStringList(); UnicodeString cInicio; wchar_t WDir[MAX_PATH], FolderName[MAX_PATH]; UnicodeString cAcceso = ""; UnicodeString cEntorno = ""; UnicodeString cTablas = ""; cAux = ChangeFileExt(Application->ExeName, ".ini"); if (!FileExists(cAux)) { slBotones->Clear(); slBotones->Text = "Buscar\r\nCancelar"; if (Mensaje(this, String("Instalación"), String("Indique la situación de la base de datos"), tdiShield, slBotones) == mrCancel) { slBotones->Text = "Abandonar"; Mensaje(this, String("Instalación"), String("No puede iniciarse la sesión.\r\nDesconozco la situación de los ficheros."), tdiError, slBotones); Application->Terminate(); return; } while (nDirectorio == 0) { memset(&bi, 0, sizeof(BROWSEINFO)); memset(WDir, 0, MAX_PATH); bi.hwndOwner = NULL; bi.pszDisplayName = FolderName; bi.lpszTitle = String("Seleccione la situación de la base de datos").c_str(); ItemID = SHBrowseForFolder(&bi); SHGetPathFromIDList(ItemID, WDir); GlobalFreePtr(ItemID); cInicio = String(WDir); if (cInicio == "") { slBotones->Text = "Abandonar"; Mensaje(this, String("Instalación"), String("No puede iniciarse la sesión.\r\nDesconozco la situación de los ficheros."), tdiError, slBotones); Application->Terminate(); return; } if (cInicio[1] > 'B') { if (cInicio.LastDelimiter("\\") == cInicio.Length()) cInicio = cInicio.SubString(1, cInicio.LastDelimiter("\\") - 1); cAux = "La base de datos de afiliados se "; if (DirectoryExists(cInicio + "\\DatAfi21")) cAux = cAux + "encuentra"; else cAux = cAux + "creará"; cAux = cAux + " en:\r\n\r\n" + cInicio + "\\DatAfi21\r\n\r\n¿Es correcta la elección?"; slBotones->Text = "Es correcta\r\nCambiar ubicación"; if (Mensaje(this, String("Instalación"), cAux, tdiNone, slBotones) == 100) { nDirectorio = 1; try { System::ChDir(cInicio); } catch(...) { slBotones->Text = "Volver"; Mensaje(this, String("Instalación"), String("La vía seleccionada no está accesible.\r\nRevise su elección, por favor."), tdiError, slBotones); nDirectorio = 0; } } } else { slBotones->Text = "Volver"; Mensaje(this, String("Instalación"), String("La vía seleccionada no está accesible.\r\nRevise su elección, por favor."), tdiError, slBotones); nDirectorio = 0; } } TIniFile *fIni = new TIniFile(ChangeFileExt(Application->ExeName, ".ini")); fIni->WriteString("DATOS", "Entorno", cInicio + "\\DatAfi21\\Gia.ini"); fIni->WriteString("DATOS", "Acceso" , cInicio + "\\DatAfi21\\Acceso"); fIni->WriteString("DATOS", "Tablas" , cInicio + "\\DatAfi21\\Tablas"); delete fIni; } TIniFile *fIni = new TIniFile(ChangeFileExt(Application->ExeName, ".ini")); fIni->ReadSectionValues(UnicodeString("DATOS"), slIniFile); cEntorno = UnicodeString(fIni->ReadString(UnicodeString("DATOS"), "Entorno", cEntorno)); cAcceso = UnicodeString(fIni->ReadString(UnicodeString("DATOS"), "Acceso" , cAcceso)); cTablas = UnicodeString(fIni->ReadString(UnicodeString("DATOS"), "Tablas" , cTablas)); delete fIni; } |
#3
|
||||
|
||||
Después de toda la mañana dando vueltas y probando diferentes códigos he encontardo, más o menos. una solución.
Código:
TIniFile *fIni = new TIniFile(cIniFile); TStringList *Entorno = new TStringList(); fIni->ReadSectionValues("Datos", Entorno); Entorno->Strings[0] = Entorno->Strings[0].SubString(Entorno->Strings[0].Pos("=") + 1, Entorno->Strings[0].Length()); Entorno->Strings[1] = Entorno->Strings[1].SubString(Entorno->Strings[1].Pos("=") + 1, Entorno->Strings[1].Length()); Entorno->Strings[2] = Entorno->Strings[2].SubString(Entorno->Strings[2].Pos("=") + 1, Entorno->Strings[2].Length()); delete fIni; Código:
UnicodeString cEntorno = Entorno->Strings[0].SubString(Entorno->Strings[0].Pos("=") + 1, Entorno->Strings[0].Length()); |
#4
|
|||||
|
|||||
Hola Angel.Matilla
Cita:
Cita:
En resumen, tal como ya te comente en el mensaje #7, en C++ Builder 6 ambos casos funcionan. Cita:
La forma que expones es correcta, aunque podes ahorrar un poco de código usando un ciclo: Código PHP:
Cita:
Sobre si C++ Builder XE3 o el comportamiento de la función UnicodeString varían de algún modo el resultado lo ignoro, ya que mi versión de C++ Builder no la incluye. Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
![]() |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Leer fichero XML | itsi | Internet | 1 | 23-10-2008 22:50:15 |
Leer parte de un fichero .RTf | Tonio | Varios | 2 | 27-03-2008 11:25:53 |
leer de fichero | machingol | Varios | 7 | 09-05-2007 17:22:42 |
Leer fichero | rocio84 | Varios | 1 | 21-05-2006 10:45:06 |
Leer un fichero .ini | oesteve | OOP | 6 | 16-06-2003 16:40:20 |
![]() |
|