Cita:
Empezado por Casimiro Notevi
¿No limpiarás las variables antes de volver a leerlas?
|
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;
}