French Difficulté avec les permissions

RTy

Member
Licensed User
Longtime User
Bonjour,
Le code ci-dessous pour copier le fichier "Text1.txt" ce trouvant dans le dossier <sourceDir> vers un dossier de mon application <targetDir>
mais j'ai l'erreure suivante :
Error occurred on line: 112 (Main)
java.io.FileNotFoundException: /storage/emulated/0/RTy/Text1.txt: open failed: EACCES (Permission denied)


Je n'arrive pas à trouver la solution.
Merci pour votre aide .
Cordialement,
Thierry.





Dim sourceDir As String = "/storage/emulated/0/RTy"
Dim sourceFile As String = "Text1.txt"
Dim targetDir As String = File.DirInternal & "/MonDossierTest"


If Not(File.IsDirectory(targetDir, "")) Then
File.MakeDir(File.DirInternal, "MonDossierTest")
Log("MakeDir")
End If


' Vérifiez si le fichier existe avant de le copier
If File.Exists(sourceDir, sourceFile) Then
Log(sourceDir &" > ok")
Log(sourceFile &" > ok")

File.Copy(sourceDir, sourceFile, targetDir, sourceFile) <----- Line 112
Log("Fichier " & sourceFile & " copié avec succès vers : " & targetDir)
Else
Log("Fichier " & sourceFile & "introuvable dans le dossier source.")
End If
 

Attachments

  • AndroidManifest.xml
    1.5 KB · Views: 18

Serge Bertet

Active Member
Licensed User
Longtime User
Salut,
sois sûr que le dossier sur lequel tu travailles ne soit pas ouvert avec Windows par USB, j'ai déjà eu un soucis avec ça ... au cas où.
 
Last edited:

klaus

Expert
Licensed User
Longtime User
Dim sourceDir As String = "/storage/emulated/0/RTy"
Avec les récentes restrictions, je crains que Android n'accorde plus l'accès à ce répertoire.
Le répertoire /storage/emulated/0/ correspond à File:DirRootExternal et celui-ci n'est plus accessible.
Une solution est avec la bibliothèque RuntimePermissions et RuntimePermissions.GetAllSafeDirsExternal.
 

RTy

Member
Licensed User
Longtime User
Salut,
sois sûr que le dossier sur lequel tu travailles ne soit pas ouvert avec Windows par USB, j'ai déjà eu un soucis avec ça ... au cas où.
Bonjour Serge,
Merci pour ta réponse mais la tablette n'est pas relier en USB....
Je vais m'orienté vers la piste de Klaus.
Cdt.
 

RTy

Member
Licensed User
Longtime User
Avec les récentes restrictions, je crains que Android n'accorde plus l'accès à ce répertoire.
Le répertoire /storage/emulated/0/ correspond à File:DirRootExternal et celui-ci n'est plus accessible.
Une solution est avec la bibliothèque RuntimePermissions et RuntimePermissions.GetAllSafeDirsExternal.
Bonjour Klaus,
Merci pour ton conseil.
Je vais essayer de mettre en application ton conseil.
Cdt
 

klaus

Expert
Licensed User
Longtime User
Voici un exemple.
Le programme ci-joint fonctionne sur mon téléphone avec Android 12, je n'en ai pas un plus récent.
J'espèes que ça fonctionne toujours sur les version plus récentes.

SafeDir sur mon téléphone: /storage/emulated/0/Android/data/b4a.SafeDirExternalDemo/files
SafeDirTextes: /storage/emulated/0/Android/data/b4a.SafeDirExternalDemo/files/Textes
Avec l'explorateur de fichiers du PC, connecté via USB, le répertoire se trouve sous Stockage interne\Android\data\b4a.SafeDirExternalDemo
Avec l'explorateur de fichiers du téléphone le répertoire n'est pas visible.

B4X:
Sub Process_Globals
    Private xui As XUI
    Private RP As RuntimePermissions
    
    Private SafeDir, SafeDirTextes As String
    Private Fichier As String
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("Layout")
    
    SafeDir = RP.GetSafeDirDefaultExternal("") ' définit le répertoire
    File.MakeDir(SafeDir, "Textes")                         ' ajoute un sous-répertoire
    SafeDirTextes = SafeDir & "/" & "Textes"
    Log(SafeDir)
    Log(SafeDirTextes)
    Fichier = "test.txt"
    File.Copy(File.DirAssets, Fichier, SafeDir, Fichier)
    File.Copy(File.DirAssets, Fichier, SafeDirTextes, Fichier)
End Sub

Sub Button1_Click
    Private txt As String
    
    txt = File.ReadString(SafeDirTextes, Fichier)
    Log(txt)
End Sub
 

Attachments

  • SafeDirExternalDemo.zip
    9.4 KB · Views: 7

RTy

Member
Licensed User
Longtime User
Voici un exemple.
Le programme ci-joint fonctionne sur mon téléphone avec Android 12, je n'en ai pas un plus récent.
J'espèes que ça fonctionne toujours sur les version plus récentes.

SafeDir sur mon téléphone: /storage/emulated/0/Android/data/b4a.SafeDirExternalDemo/files
SafeDirTextes: /storage/emulated/0/Android/data/b4a.SafeDirExternalDemo/files/Textes
Avec l'explorateur de fichiers du PC, connecté via USB, le répertoire se trouve sous Stockage interne\Android\data\b4a.SafeDirExternalDemo
Avec l'explorateur de fichiers du téléphone le répertoire n'est pas visible.

B4X:
Sub Process_Globals
    Private xui As XUI
    Private RP As RuntimePermissions
   
    Private SafeDir, SafeDirTextes As String
    Private Fichier As String
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("Layout")
   
    SafeDir = RP.GetSafeDirDefaultExternal("") ' définit le répertoire
    File.MakeDir(SafeDir, "Textes")                         ' ajoute un sous-répertoire
    SafeDirTextes = SafeDir & "/" & "Textes"
    Log(SafeDir)
    Log(SafeDirTextes)
    Fichier = "test.txt"
    File.Copy(File.DirAssets, Fichier, SafeDir, Fichier)
    File.Copy(File.DirAssets, Fichier, SafeDirTextes, Fichier)
End Sub

Sub Button1_Click
    Private txt As String
   
    txt = File.ReadString(SafeDirTextes, Fichier)
    Log(txt)
End Sub
Merci Klaus pour ton exemple.
Le fichier que je désire copier ce trouve dans le dossier Download de ma tablette et pas dans File.DirAssets.
C'est là, que je suis bloqué.
Pense tu que cela soit possible ?
 

klaus

Expert
Licensed User
Longtime User
Après quelques heures de recherches j'ai modifiée le programme avec ContentChooser, qui est un 'patchwork' de ce que j'ai trouvé sur le site.
Principalement inspiré par ce programme: TextEditor.
Il permet de lire des fichiers texte, images ou audio.
On obtient le contenu du fichier, mais pas le fichier en tant que tel.
Si tu veux sauver le contenu il faut le lire et créer un nouveau fichier ce qui se fait avec le bouton Content Chooser Copy avec du texte.
 

Attachments

  • SafeDirExternalDemo1.zip
    10.9 KB · Views: 7

RTy

Member
Licensed User
Longtime User
Merci Klaus pour tes recherches et le temps que tu passe.
Pour le moment je n'ai pas le temps d'essayer mais dès que je peux je te tiens informé.
Cdt
 

RTy

Member
Licensed User
Longtime User
Bonjour Klaus,
Je viens d'essayer ce dernier code et ça fera très bien l'affaire.
Je vais l'implémenter dans mon projet.
Encore merci à toi.
Bien Cordialement
 
Top