![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
||||
|
||||
|
¿No limpiarás las variables antes de volver a leerlas?
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#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 | |
|
|
Temas Similares
|
||||
| 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 |
|