IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Peut-on modifier les droits d'accès des fichiers assets ?


Sujet :

Android

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 51
    Points : 17
    Points
    17
    Par défaut Peut-on modifier les droits d'accès des fichiers assets ?
    Salut !

    (Je code en C# sous monodevelop 2.6 beta2)

    En fait je voudrais charger un fichier xml (placé dans le dossier Assets) de type XmlDocument. Je passe donc par un StreamReader, et je voudrais sauvegarder ce fichier donc j'instancie un StreamWriter avec le meme objet Stream que pour le StreamReader...mais le StreamWriter ne veut pas se créer car il n'a apparement pas les droits d'acces en ecriture.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    try{
         Stream file = Assets.Open("app.config");
         StreamReader strd = new StreamReader(file);
         StreamWriter stwt = new StreamWriter(file);
     
         XmlDocument dom = new XmlDocument();
         dom.Load(strd); //Chargement du fichier
     
         //Traitement...
     
         dom.Save(stwt);
    }catch(Exception e){
         tv.Text = "'Message d'erreur : "+e.Message; 
    }
    J'ai donc attrapé le message d'erreur : "Can not write to stream".

    Je voudrais donc savoir si il est possible de modifier les droit d'acces des fichiers assets.

    Merci d'avance

  2. #2
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 796
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 796
    Points : 18 814
    Points
    18 814
    Par défaut
    On ne peut pas écrire dans le dossier assets.

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 51
    Points : 17
    Points
    17
    Par défaut
    Et il n'y a pas un moyen d'obtenir un objet XmlDocument à partir des ressources par exemple ?

  4. #4
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 796
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 796
    Points : 18 814
    Points
    18 814
    Par défaut
    Je suppose que oui, mais n'ai pas essayé le C# sous Android.
    Mais sous Java on peut facilement parser des XML à l'intérieur des ressources grâce à DOM ou SAX.

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 51
    Points : 17
    Points
    17
    Par défaut
    et est ce qu'on peut ecrire sur les fichiers XML des ressources ? sont ils aussi proteger en écriture ?

    parce que moi j'ai réussi à créer un répertoire raw dans les ressources et y inserer mon fichier xml. Je peux le lire mais toujours pas sauvegarder dessus.

    Par contre, avec monodevelop en C#, je n'ai pas la méthode getXML()...j'ai cru voir quelque part que c'est la méthode quo permet d'accéder au répertoire xml des ressources.

  6. #6
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Tu as toutes la doc sur le sujet :
    http://developer.android.com/guide/t...resources.html

    Access to Original Files

    While uncommon, you might need access your original files and directories. If you do, then saving your files in res/ won't work for you, because the only way to read a resource from res/ is with the resource ID. Instead, you can save your resources in the assets/ directory.

    Files saved in the assets/ directory are not given a resource ID, so you can't reference them through the R class or from XML resources. Instead, you can query files in the assets/ directory like a normal file system and read raw data using AssetManager.

    However, if all you require is the ability to read raw data (such as a video or audio file), then save the file in the res/raw/ directory and read a stream of bytes using openRawResource().
    Edit : Donc tu ne peux que lire les données xml présent dans ton package , tu ne peux ni écrire ni modifier dans ces ressources. pour cela tu peux soit passer via un Service Web ou via la SDCard de ton smartphone

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 51
    Points : 17
    Points
    17
    Par défaut
    OK, merci...tant pis, je vais devoir trouvé une autre solution, peut etre que passer par un webservice serait une bonne solution.

  8. #8
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    je viens de m'en apercevoir .

    Tu peux également écrire dans le dossier privé de ton application :
    http://developer.android.com/guide/t...#filesInternal

    Par contre tu dois avoir surement des permissions à poser.

    Edit : Par contre juste un avis :

    On ne sait pas exactement la place libre que tu auras sur les smartphones ou sera installé ton application , sachant que sous android une nouvelle fonctionnalité à vue le jour permettant aux utilisateurs de déplacer ton application sur leur SDCARD, dû à un manque de place libre sur certains téléphones .

    Donc je ne sais pas si stocker tes fichiers en interne est une bonne idée.

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 51
    Points : 17
    Points
    17
    Par défaut
    Oui je viens juste de voir cette solution. moi je cherche juste a manipuler un fichier xml...donc de tres petite taille...

    Par contre, moi j'ai un fichier deja present dans le dossier assets (ou raw des ressources) qu'on va appeler fichier1, donc je la copie sur la memoire interne (ou externe) du telephone afin de pouvoir faire des modifications. Donc l'utilisateur va quitter l appli et les données vont se sauvegarder.

    J'ai donc un probleme...Je voudrais que si l'utilisateur ouvre l application pour la premiere fois, il n'a pas de fichier1 sur sa memoire interne, et donc il va le creer, donc il va copier le fichier du dossier raw ou assets...mais si le fichier est deja present et a plein de modification par rapport au fichier d'origine, il ne faut pas qu'il copie le fichier mais qu'il accede directement au fichier

    Est ce qu'il existe un moyen de verifier l'existance d'un fichier sur la memoire interne ?

  10. #10
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    J'ai jamais essayé mais je pense qu'il suffit que tu crées un objet File avec le nom de ton fichier (comme pour la création) et tu regardes s'il existe . Par contre cela implique que tu vas gérer la mémoire interne et externe (si tu veux avoir les deux possibilités).

    Après tu as toujours les préférences sous android , ou tu peux enregistrer une condition pour connaître l'état de ton application .

  11. #11
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 796
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 796
    Points : 18 814
    Points
    18 814
    Par défaut
    Ben t'as pas du chercher longtemps :
    http://developer.android.com/referen...putStream.html

    C'est à la première ligne :
    If the output file exists, it can be replaced or appended to. If it does not exist, a new file will be created.
    C'est ça que tu veux faire non ?

    Edit :
    Purée c'est nul ils font un try catch les gars...
    Il ni a même pas une methode exists().

    Au départ j'allais te dire essaie d'ouvrir le fichier et surround avec try/catch mais c'est pas propre.
    Ben au final c'est la manière de faire.

    Re Edit :
    Ah non j'ai mal vu il y a un booléen append !
    Mais en fait t'es en C#, du coup t'as surement pas le type d'objet FileOutputStream.

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 51
    Points : 17
    Points
    17
    Par défaut
    En fait ce que je veux, c'est que si le fichier existe deja dans la memoire interne, il ne faut pas qu'il copie le fichier.

    Et oui, ce code est en c# et lorsque j'utilise OpenOutputFile ou OpenInputfile, ca renvoi un Stream qu'il n'est pas possible de convertir en FileOutputStream ou FileInputStream...

  13. #13
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 796
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 796
    Points : 18 814
    Points
    18 814
    Par défaut
    Fait comme Feanorin le dit, essaie d'ouvrir le fichier, si tu ne peux pas, c'est qu'il n'existe pas.

    Par contre comment vous fait pour chercher de la documentation en C# ?
    Parce que JAVA à ça :
    http://download.oracle.com/javase/1.4.2/docs/api/

    Android à ça :
    http://developer.android.com/reference/packages.html

    Le C++ ya man par exemple ou ça :
    http://www.cplusplus.com/doc/tutorial/

    Mais la doc de C# c'est quand même pas :
    http://msdn.microsoft.com/fr-fr/library/618ayhy6.aspx

    J'ai fais un peu de C# en cours et j'avais déjà du mal à trouver de la doc à l'époque, j'ai recherché OpenOutputFile et OpenInputFile et j'ai rien trouvé sur internet.

    Il doit y avoir une histoire d'append ou d'exists(), mais j'ai rien pu trouver.

  14. #14
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 51
    Points : 17
    Points
    17
    Par défaut
    J'ai fabriqué ma petite solution

    J'ai defini un boolean "exist", instancié avec la valeur "false" et je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    string[] l = FileList();
     
    foreach(string val in l){
    	if(val.Equals(FILENAME)){
    		exist = true;
    	}
    }
    FileList() renvoi un tableau de chaine de carateres qui sont la liste des noms de fichiers installés en mémoire interne.

Discussions similaires

  1. gérer les droits d'accès des utilisateurs à mon site
    Par sajodia dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 25/03/2009, 15h55
  2. Modifier les droits d'accès
    Par Thulkash dans le forum VBScript
    Réponses: 0
    Dernier message: 31/07/2007, 14h35
  3. Réponses: 1
    Dernier message: 16/07/2007, 10h13
  4. Réponses: 6
    Dernier message: 21/04/2007, 20h08
  5. [APACHE] Modifié les droits d'accès à un dossier.
    Par will-scs dans le forum Apache
    Réponses: 1
    Dernier message: 26/08/2005, 22h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo