Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-08-2018
Yulexis Yulexis is offline
Miembro
 
Registrado: sep 2016
Posts: 19
Poder: 0
Yulexis Va por buen camino
Question Problema con lectura de archivo

Saludos a todos.
Estoy realizando una app para Android y resulta que luego de descargar un .zip y extraerlo en:

Código Delphi [-]
Directorio_raiz := System.IOUtils.TPath.GetDocumentsPath + System.SysUtils.PathDelim ;

Entre los archivos que se extraen se encuentran los siguientes:
Código Delphi [-]
ruta_archivo := System.IOUtils.TPath.Combine(System.IOUtils.TPath.GetDocumentsPath,'datos.ini');
ruta_imagen := TPath.GetDocumentsPath + PathDelim + 'imagen.png';

Cuando realizo:
Código Delphi [-]
Imagen_muestra.Bitmap.LoadFromFile(ruta_imagen);
se muestra la imagen correctamente.

Cuando realizo:
Código Delphi [-]
Memo1.Lines.LoadFromFile(ruta_archivo);
No me carga el contenido. Cuando trato de leerlo como el archivo .ini que es(como debo de hacerlo porque trae datos que necesito) tampoco hace nada.
El archivo se encuentra, porque realizo una búsqueda en ese directorio y se listan todos los archivos que extraje del zip.

Alguien sabe qué es lo que está pasando?
Responder Con Cita
  #2  
Antiguo 15-08-2018
Yulexis Yulexis is offline
Miembro
 
Registrado: sep 2016
Posts: 19
Poder: 0
Yulexis Va por buen camino
Resuelto

Listo, ya encontré la solución. Nadie llegó a contestarme pero la pongo por si a alguien le pasa lo mismo.
Resulta que era un problema de codificación de caracteres al leer el archivo. Al inicio estaba haciendo lo siguiente:
Código Delphi [-]
miArch : TIniFile;
  miArch := TIniFile.Create(ruta);
Haciendo esto en Windows no da problemas pero en Android me genera el siguiente error: "No mapping for the Unicode character exists in te target multi-byte code page."
Maldito error que me ha salido hasta en la sopa L
Este error pasa cuando el archivo contiene caracteres que no se encuentran en la tabla ACSII. Luego de horas leyendo por la red leí que la Unit TIniFiles contiene un objeto TMemIniFile que permite abrir un archivo con una codificación determinada. Existen varias codificaciones de caracteres, por lo que cuando revisé las tablas de cada una de ellas me di cuenta de que la que me hacía falta era la ANSI.
La solución definitiva fue la siguiente:
Código Delphi [-]
miArch := TMemIniFile.Create(ruta, TEncoding.ANSI);
  miArch : TCustomIniFile;
En esto no vale usar el siguiente código para que detecte automáticamente la codificación del archivo. Existen codificaciones que aceptan por ejemplo, caracteres con tildes, pero a la hora de mostrarlos no te los muestra correctamente. Debemos saber en todo momento el tipo de codificación del archivo. Lo pongo de ejemplo porque fue lo primer que me vino a la mente para no pasar más trabajo averiguando el tipo de codificación de caracteres:
Código Delphi [-]
try
        miArch := TMemIniFile.Create(ruta_archivo);
        Memo1.Lines.Add('Abierto como Default);
      except
        try
          miArch := TMemIniFile.Create(ruta_archivo, TEncoding.UTF8);
          Memo1.Lines.Add('Abierto como UTF8');
        except
            try
              miArch := TMemIniFile.Create(ruta_archivo, TEncoding.Unicode);
              Memo1.Lines.Add('Abierto como Unicode');
            except
               try
                  miArch := TMemIniFile.Create(ruta_archivo, TEncoding.ASCII);
                  Memo1.Lines.Add('Abierto como ASCII');
               except
                  try
                    miArch := TMemIniFile.Create(ruta_archivo, TEncoding.ANSI);
                    Memo1.Lines.Add('Abierto como ANSI');
                  except
                    try
                        miArch := TMemIniFile.Create(ruta_archivo, TEncoding.BigEndianUnicode);
                        Memo1.Lines.Add('Abierto como BigEndianUnicode');
                    except
                      try
                            miArch := TMemIniFile.Create(ruta_archivo, TEncoding.UTF7);
                            Memo1.Lines.Add('Abierto como UTF7');
                      finally
                           nada := '';
                      end;
                    end;
                  end;
               end;
            end;
        end;
      end;
No es la primera vez que este error me aparece para estarme molestando. Ahora tengo claro por qué es que sucede. Debemos de tener en cuenta cuando vamos a trabajar con archivos en Android el tipo de codificación con que lo vamos a tratar.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Lectura de archivo en paralelo jars OOP 0 19-12-2011 15:31:10
Problema de lectura de un archivo binario de Pascal Juan Quintana Varios 2 16-03-2011 11:21:06
Ayuda con Lectura de archivo fleming Varios 14 07-09-2010 11:22:56
Lectura de un archivo plano josem Varios 2 14-09-2006 00:06:39
lectura lenta de un archivo .DAT, ¿por que? URBANO Varios 3 09-12-2003 22:07:16


La franja horaria es GMT +2. Ahora son las 04:28:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi