Spanish Donde están mis archivos? SOLUCIONADO

carlos7000

Well-Known Member
Licensed User
Longtime User
Hola.

Cree una pequeña aplicación para guardar datos que recoge en

B4X:
File.DirInternal

La aplicación muestra como ruta a los archivos

data/user/0/com.BinanceBackup/files

Pero ni en el almacenamiento principal, ni en el externo(MicroSd) aparecen.

Se que los archivos existen porque la función

B4X:
If File.Exists(File.DirInternal, Archivo) = True Then

devuelve

B4X:
True

y

B4X:
Log(File.Size(File.DirInternal, Archivo))

devuelve el tamaño correcto.

En el mismo DirInternal tambien hay una base de datos, la cual funciona correctamente.

El caso es que en el almacenamiento principal en /data/ user/0/com.BinanceBackup, ni siquiera aparece com.BinanceBackup

Sé que /data/user/0/com.BinanceBackup realmente es Android/Data

Android/data/
no aparece nada. Tampoco en

Android/obb
He buscado incluso en otras carpetas en las que se supone no deberían estar los archivos.
He bajado aplicaciones para buscar archivos, pero no aparecen.

El código para guardar los datos es

B4X:
Private Sub SaveParPrice(Pair As String, BidPrice As String, AskPrice As String)
    Dim Archivo     As String
    Dim Linea        As String
    Dim FechaHora    As String
 
    Archivo = Pair & ".txt"
 
    FechaHora    = DateTime.GetYear(DateTime.Now) & "-" & DateTime.GetMonth(DateTime.Now) & "-" & DateTime.GetDayOfMonth(DateTime.Now) & " " & DateTime.GetHour(DateTime.Now) & ":" & DateTime.GetMinute(DateTime.Now) & ":" & DateTime.GetSecond(DateTime.Now)
    Linea    = FechaHora & ", " & BidPrice & ", " & AskPrice
 
    Dim Writer As TextWriter
    Writer.Initialize(File.OpenOutput(File.DirInternal, Archivo, True))
    Writer.WriteLine(Linea)
    Writer.Close
 
    'Archivo existe ?
    Log("Existe = " & File.Exists(File.DirInternal, Archivo))
    'Para verificar si el archivo aumenta de tamaño
    Log("Size: " &File.Size(File.DirInternal, Archivo))
    'Donde esta?
    Log("Path: " & File.DirInternal)
End Sub

Adjunto un par de capturas.



 
Last edited:

Mariano Ismael Castro

Active Member
Licensed User
Copiar Archivos:
'Prueba esto
    Wait For (File.CopyAsync(File.DirInternal, Archivo, File.DirRootExternal, Archivo)) Complete (Success As Boolean)
    Log("Archivo Copiado?: " & Success) 'Resumable Sub
    
    'o esto
    
    File.Copy(File.DirInternal, Archivo, File.DirRootExternal, Archivo)
 

carlos7000

Well-Known Member
Licensed User
Longtime User


No funcionó.



 

carlos7000

Well-Known Member
Licensed User
Longtime User


Con File.Copy tampoco funcionó

 

angel_

Well-Known Member
Licensed User
Longtime User
Tal como lo entiendo, en las últimas versiones de Android no es posible acceder a esa carpeta a menos que tengas el dispositivo root, si quieres poder acceder tendrías que utilizar lo siguiente (no requiere permisos).

B4X:
Dim rp As RuntimePermissions
Dim Path As String = rp.GetSafeDirDefaultExternal("my_files")

Pero Erel desaconseja este último método y recomienda xui.DefaultFolder que en Android es File.DirInternal.
 

carlos7000

Well-Known Member
Licensed User
Longtime User
Te hacía falta poner el permiso PERMISSION_WRITE_EXTERNAL_STORAGE. Averigua sobre eso, suerte
Hola.

Ya probé el proyecto que me ha enviado. Vi la línea agregada al Manifest.

Al ejecutar el proyecto, continua con el mismo problema.

Muchas gracias por su colaboración

 
Last edited:

carlos7000

Well-Known Member
Licensed User
Longtime User

Hola.

Ya he leído el post. tienen razón. Pero yo no estoy realmente interesado en almacenar los datos en el almacenamiento externo. Para mi, el almacenamiento interno, incluso es mejor.

El problema es, que en el almacenamiento interno no aparecen los archivos.

Si empleo File.DirDefaultExternal da error. Al guardar los archivos en File.DirInternal, no da errores, pero no tengo acceso a los archivos.

Adjunto la ultima versión del proyecto.
 

Attachments

  • BinanceBackup.zip
    33.2 KB · Views: 132

edgar_ortiz

Active Member
Licensed User
Longtime User
Carlos

He revisado tu proyecto, pero para mantener las versiones de mis clientes, NO tengo actualizada la ultima version de B4X.

Para el "PATH" donde quieres guardar tus archivos, utiliza:

B4X:
Dim rp As RuntimePermissions  'need runtimepermissions lib.
        rp.GetSafeDirDefaultExternal("")

Toma en cuenta que en las "ultimas" versiones de Android, si necesitas "ver" los archivos en tu telefono, tienes que utilizar una aplicación como: "File Manager Plus"

Espero te sirva,

Saludos,

Edgar
 
Last edited:

angel_

Well-Known Member
Licensed User
Longtime User
Este tema cada vez es más frecuente, puedes mostrar la solución que has adoptado.
 

josejad

Expert
Licensed User
Longtime User
no estoy realmente interesado en almacenar los datos en el almacenamiento externo. Para mi, el almacenamiento interno, incluso es mejor.
Hola:

Por clarificar algunas cosas, ya que los términos "interno" y "externo" son un poco confusos en android.

Por un lado, la memoria interna puede referirse a la memoria del teléfono (32, 64, 128gb) y la externa a la tarjeta microSD.

Pero en términos de android, tanto la interna como la externa están en la propia memoria del teléfono, refiriéndose la memoria interna a la parte de memoria (o carpetas) que sólo son accesible para las aplicaciones (cada aplicación a la suya); y externa son las carpetas compartidas a las que se puede acceder desde el explorador de archivos de android o desde el ordenador al conectarte por USB (por ejemplo: DCIM, Música, etc...).

Como bien indica Ángel, android ya no deja acceder a las carpetas internas desde el explorador de archivos, lo cual no quiere decir que los archivos no estén ahí (de ahí que File.Exists(File.DirInternal, Archivo) = True devuelva True), sino que sólo son accesibles para la aplicación.

Así que si quieres que un archivo pueda ser accesible, debes guardarlo en rp.GetSafeDirDefaultExternal(""), como ya te indicaron.
Si empleo File.DirDefaultExternal da error.

Da error porque, o bien debes solicitar permiso para escribir en esa ruta a partir de android 6+ (como también indicaron en un post), o si quieres usarlo sin ese permiso, tendrás que bajar el targetSdkVersion a < 23 (si la app no la vas a subir a google play).

Pero Erel desaconseja este último método y recomienda xui.DefaultFolder que en Android es File.DirInternal.
Creo (corregidme si me equivoco), que esto no es correcto. Para acceder a la memoria externa (entendida como carpetas visibles), hay que hacerlo con GetSafeDirDefaultExternal. Para guardar los archivos de tu app y que no sean accesibles, sí es recomendable xui.DefaultFolder = File.DirInternal

No me quedo mas alternativa que guardar los archivos en la ruta que me da
No creo que Chatgpt te haya ayudado a recuperar tus archivos, éstos nunca se han perdido, estaban ahí.

Hay otra alternativa, quizás la más correcta, si lo que quieres es que tu archivo de copia de seguridad sea accesible para que pueda guardarse como respaldo en otro sitio, y es SaveAs. Con este método, el usuario elige dónde quiere guardar su archivo de copia de seguridad. No necesita permisos y puede seleccionar la memoria externa de android (una carpeta accesible), la memoria externa SD, o incluso un servicio online como Google Drive, OneDrive, Dropbox o cualquier servicio que tenga configurado el teléfono.

saludos,
 
Last edited:

angel_

Well-Known Member
Licensed User
Longtime User
Es correcto lo que dices, lo decía por el punto 8 de recomendaciones de Erel.

 

carlos7000

Well-Known Member
Licensed User
Longtime User
José dijo:
No creo que Chatgpt te haya ayudado a recuperar tus archivos, éstos nunca se han perdido, estaban ahí.

Cuando dije:

No me quedo mas alternativa que guardar los archivos en la ruta que me da

rp.GetSafeDirDefaultExternal("")

Esa fue la solución.

Saludos.

Debí decir "Los archivos fueron movidos a GetSafeDirDefaultExternal"

Sí, los archivos no estaban perdidos, porque al verificar cada archivo, File.Exists, como dije al principio, siempre retornaba True

Me refería a que igual que cada uno de uds, ChatGPT, también me dio ideas. Por ejemplo esta:




La captura aparece en el video anterior, Respuesta 14, de este post

Yo le lleve el equipo a un amigo, con esta captura impresa. Él me recupero los archivos, no se si fue con este método u otro. el caso es que se pudieron copiar los archivos.

Muchas gracias por toda la ayuda que me han proporcionado.
 
Last edited:
Cookies are required to use this site. You must accept them to continue using the site. Learn more…