Saludos Neftali y mamcx.
Con el siguiente código que encontré en la red según los "puntos de control" que he puesto después de cada acción me dice que la descarga se ha realizado. Al final compruebo si el archivo .zip existe y si me dice que si y lo extraigo.
Recordarles que el último error que lanzaba era el siguiente: "No mapping for the Unicode character exists in te target multi-byte code page."
El código que encontré y que le muestro a continuación también me generaba ese error y lo resolví agregándole el segundo parámetro a la función Create:
Código Delphi
[-]XMLRequest := TStringStream.Create( XMLRqst, TEncoding.UTF8 );
Hasta ahora las pruebas que he realizado no han fallado y siempre han dado el mismo resultado, por lo que el tema principal del hilo fue RESUELTO (Tengo que meter todo en un hilo de ejecución claro).
Código Delphi
[-]var
XMLRqst : String;
XMLRequest : TStringStream;
idHTTP : TIdHTTP;
ruta, ruta_imagen : string;
Mi_Arch : TIniFile;
i : Integer;
Zip :TZipFile;
begin
XMLRqst := '';
ForceDirectories( Directorio_raiz );
Memo1.Lines.Add('Directorio de la actualización creado.');
ruta := Directorio_raiz + 'update.zip';
Memo1.Lines.Add('Ruta donde guardar el .zip: ' + ruta);
try
XMLRequest := TStringStream.Create( XMLRqst, TEncoding.UTF8 );
try
idHTTP := TIdHTTP.Create;
try
idHTTP.ReadTimeout := 60000;
idHTTP.ConnectTimeout := 60000;
idHTTP.HandleRedirects := True;
idHTTP.Compressor := TIdCompressorZLib.Create(idHTTP);
Memo1.Lines.Add('Iniciando descarga...');
idHTTP.Get( 'Act.zip', XMLRequest );
XMLRequest.SaveToFile(ruta);
if FileExists(ruta) then Memo1.Lines.Add('Descargado en: ' + ruta);
finally
idHTTP.Free;
end;
finally
XMLRequest.Free;
end;
except
on E : Exception do
begin
ShowMessage( 'exception : '#13 + E.Message );
end;
end;
Memo1.Lines.Add('Extrayendo archivo...');
if FileExists(ruta) then
begin
Memo1.Lines.Add('Existe: ' + ruta);
Zip := TZipFile.Create;
Try
Zip.Open (ruta, zmRead);
Zip.ExtractAll( Directorio_raiz );
Memo1.Lines.Add('Archivo extraido.');
Finally
Zip.Free;
End;
end
else
Memo1.Lines.Add('NO existe: ' + ruta);
Memo1.Lines.Add('Iniciando creación de entradas...');
ruta := Directorio_raiz + 'Entradas.ini';
if FileExists( ruta ) then
begin
Memo1.Lines.Add('Existe: ' + ruta );
Mi_Arch := TIniFile.Create(ruta );
Mi_Arch.ReadSections(ListBox1.Items);
for I := 0 to ListBox1.Items.Count -1 do
begin
ruta_imagen := Mi_Arch.ReadString(ListBox1.Items[i],'img','');
Memo1.Lines.Add('Creando anuncio ' + IntToStr(i));
Memo1.Lines.Add('... ' + ruta_imagen);
Crea_Anuncio(Directorio_raiz + ruta_imagen ,ListBox1.Items[i], Mi_Arch.ReadString(ListBox1.Items[i],'descrip',''));
end;
end;
end;
Como les comenté, parece que ha descargado el archivo y que logra extraerlo. Pero... (como siempre)...
Entre los archivos existe un .ini (los .ini de toda la vida) que es el que trae la configuración de toda la actualización. Este señor me dice que existe, pero no logro leerlo

Se extrae en: /data/data/com.embarcadero.prueba/files/ENTRADAS/Entradas.ini