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

Entrée/Sortie Java Discussion :

Droit de suppression de fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Par défaut Droit de suppression de fichier
    Bonjour,

    J'ai un problème dans un projet que je développe. Ce projet permet d'installer et de désinstaller des plugins. A la désinstallation d'un plugin, je dois donc entre autre supprimer tous les fichiers le concernant.

    Quand l'utilisateur demande à désinstaller un plugin, je voudrai donc vérifier que tous les fichiers soient supprimable avant de commencer la désinstallation (Ce qui n'est pas le cas si le plugin est en cours d'utilisation)...

    Je n'arrive pas à trouver comment faire ça proprement (La méthode canWrite de File permettant de vérifier l'accès en écriture mais pas la suppression).

    Pour le moment j'utilise donc un moyen plutôt "sale" :
    - Je renomme le fichier
    - Je fais une copie de ce fichier ayant le même nom que l'original pour retrouver mon fichier original
    - Je supprime le fichier renommé et je me retrouve donc dans la même configuration qu'au début.

    Si cette procédure de renommage fonctionne, c'est que le fichier peut être supprimé... Quelqu'un connaitrait un moyen de vérifier la même chose sans passer par ce genre de bricolage??

    Mon problème est donc de pouvoir vérifier que tous les fichiers d'un répertoire peuvent être supprimés avant de commencer la suppression.

    Merci pour vos réponses

  2. #2
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    As tu regardé du coté de la classe SecurityManager
    Je pense que sa méthode checkDelete(String file) devrait résoudre ton problème...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Par défaut
    Merci pour la réponse !!

    Je viens de regarder checkDelete(String file) qui semble faire la bonne chose en théorie mais j'ai un problème pour l'utiliser

    Je me suis fais ce petit programme de test :

    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
    16
    17
    18
    19
    20
    21
     
    public static void main(String[] args) {
            SecurityManager manager = new SecurityManager();
    	String nomFichier = "C:\\test\\test.txt";
     
            //teste la possibilité de suppression
    	try{
    		manager.checkDelete(nomFichier);
    		System.out.println("supprimable");
    	}catch(SecurityException e){
    		System.out.println("non supprimable");
    		e.printStackTrace();
    	}
     
    	//tente de supprimer dans tous les cas	
    	if(new File(nomFichier).delete()){
    		System.out.println("supprimé");
    	}else{
    		System.out.println("non supprimé");
    	}
    }
    A l'exécution de ce programme (le fichier test.txt existe bien sûr ^^), je me retrouve avec la console suivante :

    non supprimable
    java.security.AccessControlException: access denied (java.io.FilePermission C:\test\test.txt delete)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkDelete(Unknown Source)
    at tests.TestVerificationRepertoireSupprimable.main(TestVerificationRepertoireSupprimable.java:16)
    supprimé

    l'exception est lancée, signalant que le fichier n'est pas supprimable... par contre, la fonction delete arrive très bien à supprimer le fichier... y a t'il quelque chose que je fais mal??

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Par défaut
    Le pb c'est que ça dépend des droits d'accès alloués. J'ai exactement le même pb et par sécurité tout est verouillé sur le serveur. Donc à chaque dépoiement il faut aller déverrouiller le ou les répertoire concernés.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Par défaut
    Merci pour cette réponse mais je ne pense pas que mon problème vienne de là.

    En effet, mon problème est de savoir si un fichier peut être supprimé sur mon poste sur lequel rien n'est verrouillé ( autrement dit si ce fichier n'est pas en cours d'utilisation). Si tous les fichiers qui doivent être supprimés peuvent l'être, la suppression a lieu. sinon, tous les fichiers doivent être conservés.

    De mon côté je n'ai toujours rien trouvé qui permette de faire ce truc tout bête

    Merci de m'aider si vous avez encore des idées !!

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par legentil Voir le message
    Je viens de regarder checkDelete(String file) qui semble faire la bonne chose en théorie mais j'ai un problème pour l'utiliser
    Non le sécurity manager permet seulement de vérifier les droits systèmes, mais de définir des droits au niveau de l'application Java.

    Par défaut dans une application il n'y a pas de security-manager, mais tu en as par exemple sur les applets afin de les empêcher de faire n'importe quoi

    Le Security Manager n'est pas la solution à ton problème !



    Citation Envoyé par legentil Voir le message
    En effet, mon problème est de savoir si un fichier peut être supprimé sur mon poste sur lequel rien n'est verrouillé ( autrement dit si ce fichier n'est pas en cours d'utilisation). Si tous les fichiers qui doivent être supprimés peuvent l'être, la suppression a lieu. sinon, tous les fichiers doivent être conservés.
    !
    Ce n'est malheureusement pas possible en Java : tu peux savoir si tu as les droits de supprimer un fichier (canWrite() devrait faire l'affaire), mais cela ne garantie pas que tu arrives effectivement le supprimer si le fichier est ouvert


    Perso je vois deux solutions :
    • Soit tu passes par du code natif et des appels systèmes, si cela existe (ce que j'ignore complètement)
    • Soit tu triches un peu : tu renommes tous les fichiers avec un nom temporaire. Si ca passe cela signifie que tu peux tout supprimer, sinon tu restaures les noms des fichiers que tu as renommés...
      C'est pas super-propre mais bon


    a++

  7. #7
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Soit tu triches un peu : tu renommes tous les fichiers avec un nom temporaire. Si ca passe cela signifie que tu peux tout supprimer, sinon tu restaures les noms des fichiers que tu as renommés...
    C'est pas super-propre mais bon
    Le problème c'est bien qu'un système de fichier n'est pas transactionnel, et donc, il peut toujours y avoir un problème pour restaurer les noms de fichier.
    Mais je vote +1 pour la solution proposée

Discussions similaires

  1. ACL et droit de suppression de fichiers
    Par garulfo2 dans le forum Sécurité
    Réponses: 1
    Dernier message: 11/10/2013, 12h20
  2. [PHP 4] Suppression de fichier/problème de droits
    Par Spyritus dans le forum Langage
    Réponses: 3
    Dernier message: 17/11/2009, 10h21
  3. [Administration] Limiter le Droit de suppression d'un fichier.
    Par babo dans le forum Subversion
    Réponses: 4
    Dernier message: 11/07/2007, 10h57
  4. Auto suppression de fichier
    Par pato dans le forum Langage
    Réponses: 4
    Dernier message: 05/03/2004, 10h09
  5. Suppression de fichiers
    Par wasch dans le forum C++Builder
    Réponses: 6
    Dernier message: 20/11/2003, 17h37

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