Italian Copiare file da InternalDir ad altra Dir

Fulvio75

Well-Known Member
Licensed User
Buongiorno a tutti, come da titolo vorrei copiare un file da "File.DirInternal" del telefono a una directory visibile dall' App Files del telefono, ad esempio nella cartella Documenti del telefono creando una sottocartella all'interno di quest'ultima: Documenti\MioFile.
Come posso fare?
Grazie mille
 

Star-Dust

Expert
Licensed User
Longtime User
File.Copy(PathOrigine,NomeFileOrigine,PathDestinazione,NomefileDestinazione)

Se scrivi nella Dir Root External e hai android 6+ chiedi i permessi di runtime
 
Last edited:

Fulvio75

Well-Known Member
Licensed User
Non mi risulta che esista una cartella di sistema chiamata "Documenti" (nemmeno in inglese).

Si se vai su gestione files la vedi, vorrei copiare lì il mio file da dirinternal per vedere quello che scrivo e fare il backup visto che non ho una memoria esterna nel telefono
 

Fulvio75

Well-Known Member
Licensed User
File.Copy(PathOrigine,NomeFileOrigine,PathDestinazione,NomefileDestinazione)

Se scrivi nella Dir Root External e hai android 6+ chiedi i permessi di runtime
Come faccio a specificare il percorso della cartella documenti
 

Sagenut

Expert
Licensed User
Longtime User
Non mi risulta che esista una cartella di sistema chiamata "Documenti" (nemmeno in inglese).
Mi associo a @LucaMs e ti chiedo:
Forse è il File Manager che usi che ti presenta i file divisi per Categorie?
Perché il mio fà così.
Se invece guardo la struttura dell'archivio con un altro programma non ho la cartella Documenti, o le altre categorie.
Per vedere la struttura reale (chiamiamola così) io uso Total Commander.
 

LucaMs

Expert
Licensed User
Longtime User
Si se vai su gestione files la vedi, vorrei copiare lì il mio file da dirinternal per vedere quello che scrivo e fare il backup visto che non ho una memoria esterna nel telefono

Se è una cosa temporanea, solo per gli scopi che hai descritto, usa la DirRootExternal (devi implementare i permessi nella tua app).

Su stackoverflow ho trovato questo:
File dir = Environment.(Environment.DIRECTORY_DOCUMENTS);
che andrebbe "convertito" usando JavaObject.

A meno che non intervenga qualcuno a farlo... tra un po' potrei farlo io.
 

LucaMs

Expert
Licensed User
Longtime User
Figlio di buona donna! (non tu @Fulvio75, Android :D)

B4X:
Sub Process_Globals
   Private rp As RuntimePermissions
End Sub

Sub Activity_Create(FirstTime As Boolean)
    rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
    Wait For Activity_PermissionResult (Permission As String, result As Boolean)
    If result Then
        Log(File.ListFiles(File.DirRootExternal)) 'ignore
        
        Dim DocDir As String = File.Combine(File.DirRootExternal, "documents")
        Log("documents:")
        Log(File.ListFiles(DocDir)) 'ignore
    Else
        Log("permesso negato")
    End If
End Sub

Lancia questo sorgente (crea una nuova app, per un test).

Pare funzionare, infatti non va in crash, ma... mi restituisce un array vuoto come file nella Documents - che invece non lo è!
 

Fulvio75

Well-Known Member
Licensed User
Il file di cui parlo è un db che vado a copiare tramite DButil in internal per poterci scrivere sopra aggiungere record ecc.
Una volta che scrivo sopra dei dati devo poterlo anche rivedere, copiare in una directory visibile perche fino quando rimane in internal non lo posso vedere o copiare da nessuna parte, ecco perché vorrei copiarlo in documenti.
Ovvio se si può fare
 

LucaMs

Expert
Licensed User
Longtime User
Il file di cui parlo è un db che vado a copiare tramite DButil in internal per poterci scrivere sopra aggiungere record ecc.
Una volta che scrivo sopra dei dati devo poterlo anche rivedere, copiare in una directory visibile perche fino quando rimane in internal non lo posso vedere o copiare da nessuna parte, ecco perché vorrei copiarlo in documenti.
Ovvio se si può fare
Sì, capisco, cosa comune - fatto anche da me, più volte :D (già ti anticipo che per "leggere" il db uso un'app di Erel, anche se forse tu hai altre app installate, https://www.b4x.com/android/forum/threads/android-sqlite-viewer.9197/#content)

E allora copia il db dalla cartella nella quale lo hai messo e modificato nella File.DirRootExternal. Dovrai aggiungere all'app i permessi, come vedi nel sorgente sopra.
 

LucaMs

Expert
Licensed User
Longtime User
In pratica, aggiunto il codice che vedi per i permessi (manca la parte del manifest che ti aggiungo qui), userai qualcosa come:

File.Copy(File.DirInternal, "MioDB", File.DirRootExternal, "MioDB")

così potrai accedere al tuo db nella "radice del dispositivo"


Nel manifest:
B4X:
AddManifestText(<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="30" />
)
 

Fulvio75

Well-Known Member
Licensed User
In pratica, aggiunto il codice che vedi per i permessi (manca la parte del manifest che ti aggiungo qui), userai qualcosa come:

File.Copy(File.DirInternal, "MioDB", File.DirRootExternal, "MioDB")

così potrai accedere al tuo db nella "radice del dispositivo"


Nel manifest:
B4X:
AddManifestText(<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="30" />
)
Ok grazie mille provo e ti faccio sapere, quindi posso copiarlo solo lì in altre cartelle no
 

maXim

Active Member
Licensed User
Longtime User
Ciao Fulvio75,

fermo restando che la gestione dei relativi permessi è necessaria, ti informo (se ti può essere utile) che a suo tempo realizzai la libreria db2000.B4A.eXtrafunctions dove si trova la classe fFILETOOLS con diversi metodi per la gestione dei file e delle cartelle e dove la stringhe dei nomi (sorgente e/o destinazione) possono essere comprensive dei percorsi...
 

Fulvio75

Well-Known Member
Licensed User
Ciao Fulvio75,

fermo restando che la gestione dei relativi permessi è necessaria, ti informo (se ti può essere utile) che a suo tempo realizzai la libreria db2000.B4A.eXtrafunctions dove si trova la classe fFILETOOLS con diversi metodi per la gestione dei file e delle cartelle e dove la stringhe dei nomi (sorgente e/o destinazione) possono essere comprensive dei percorsi...
Ok grazie oggi guardo
 
Top