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 :

Echec suppression d'un fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 754
    Points : 376
    Points
    376
    Par défaut Echec suppression d'un fichier
    Bonjour,

    tout d'abord, il me faut dire que le code suivant ne se lance pas depuis la machine sur lequel il travaille (d'où la présence de l'ip).


    Je vous explique ce que fais le code.

    Il va chercher un fichier sur le serveur.
    Il le recopie en modifiant une ligne.

    Cette partie est OK.

    Par la suite, je voudrais effacer l'ancienne version du fichier.

    Sauf que delete me renvoie false à ce moment là; et il me semble bien avoir fermé toutes les entrées, ce que ce soit en lecture et écriture.

    Par la suite, je veux simplement renommer le nouveaux fichier comme l'ancien (ce qui marche je pense mais échoue pour le moment comme le fichier n'est pas supprimé).


    Voici le code: (en vert la partie fonctionnelle; et en rouge ce qui pose problème)

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    	//Return the old UU 
    	public String modifGrfiti(String ip,Settings set,FTextArea test){
    		String pathGrfiti="\\\\"+ip+"\\\\"+set.getpathGrfiti();
    		String newPath="\\\\"+ip+"\\\\"+set.getrepGrfiti()+"\\GrfItiServerV2bis.xml";
    		String UU="notFound";
    		File grfiti=new File(pathGrfiti);
    		if(grfiti.exists()){
    			BufferedReader lecteurAvecBuffer = null;
    		    String line;
    		    
    		    try{
    		    	lecteurAvecBuffer = new BufferedReader(new FileReader(grfiti.getPath()));
    		    	//create the newFile
    		    	BufferedWriter writer = new BufferedWriter(new FileWriter(new File(newPath)));
    		    	//open writting file mode
    		    	FileWriter fw= new FileWriter(newPath,true);
    				while ((line = lecteurAvecBuffer.readLine()) != null){
    					//Read the file line by line
    					if(line.contains("<GraphTC>")){
    						String newLine="<GraphTC>"+set.getdestGraph()+"\\geocati_"+this.getNumUU()+"</GraphTC>\n";
    						fw.write(newLine);
    						UU=line.substring(line.lastIndexOf("_")+1,line.lastIndexOf("_")+6);
    					}else{
    						fw.write(line+"\n");
    					}
    				}
    				lecteurAvecBuffer.close();
    				fw.close();
    				writer.close();
    				//V2vis is the new File so delete old one
    				if(grfiti.delete()){
    					System.out.println("Ancien Grfiti supprimé OK\n");
    					test.addext("Ancien Grfiti supprimé OK\n");
    				}else{
    					System.out.println("Echec suppression ancien Grfiti");
    					test.addext("Echec suppression ancien Grfiti\n");
    				}
    				//V2 is destroyed; now change V2bis into V2
    				String com= "ren "+newPath+ " GrfItiServerV2.xml";
    				Launch testCom=new Launch(com,test);
    				//back the new Grfiti
    				testCom.exe();
    		    }catch (IOException e ) {
    				// TODO Auto-generated catch block
    		    	System.out.println("Echec de traitement du fichier\n");
    				e.printStackTrace();
    			}
    		}else{
    			System.out.println("Le fichier "+pathGrfiti+" n'existe pas !");
    			test.addext("Le fichier "+pathGrfiti+" n'as pas été trouvé !");
    		}
    		return UU;
    	}
    Il y a bien un fichier ouvert localement en écriture pendant que cette fonction travaille, mais normalement ça ne devrait pas poser de problèmes...

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Et si tu le supprime "à la main" en passant par l'explorateur de fichiers, ça marche ?
    (pour éliminer un problème de droit d'accès)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 754
    Points : 376
    Points
    376
    Par défaut
    Oui bien sûr qu'à la main ça marche^^

    J'ai quand même jeté un coup d'oeil aux droits, j'ai mis les utilisateurs en contrôle total, et là j'ai pu supprimer.

    Chose étrange, le fichier que j'ai crée derrière lui n'avait pas ses droits, mais j'ai pu le supprimer également...sans modifier les droits.


    Mais de toute façon cette histoire de droit ne devrait pas jouer vu que le compte utiliser est admin de tous les serveurs.

    En tout cas il semblerait que cela fonctionne à présent. J'avoue ne pas comprendre...

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Essaye également de passer par l'API java.nio.Path pour supprimer ton fichier, pour avoir un message d'erreur explicite le cas échéant. Tu n'es pas obligé de tout modifier pour faire ce test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    try {
     
         Files.delete(grfiti.toPath());
    					System.out.println("Ancien Grfiti supprimé OK\n");
    					test.addext("Ancien Grfiti supprimé OK\n");
     
    }
    catch(IOException e) {
    	System.out.println("Echec suppression ancien Grfiti");
    	test.addext("Echec suppression ancien Grfiti\n");
    }
    Ensuite, il est possible, selon le protocole de partage (smb/cifs ? nfs ?), qu'il y ait de la latence sur les actions sur fichiers distants. S'il s'agit que le fichier n'existe plus lorsque l'application est finie, tu peux essayer un deleteOnExit().
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,



    Pourquoi tu ouvres deux fois le fichier ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		    	//create the newFile
    		    	BufferedWriter writer = new BufferedWriter(new FileWriter(new File(newPath)));
    		    	//open writting file mode
    		    	FileWriter fw= new FileWriter(newPath,true);

    Sinon pour la fermeture des fichiers, il vaut mieux passer par des try/finally, ou mieux le try-with-ressource de Java 7.


    Au passage si tu es sous Java 7, il est préférable d'utiliser la nouvelle API Path :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Files.delete(grfiti.toPath());
    Cela te génèrera une erreur avec un message clair si le fichier ne peut pas être supprimé.


    Au passage en Java 7 pour écraser un fichier sur le même disque, il est bien plus simple d'utiliser Files.move() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Files.move(source, target, StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.ATOMIC_MOVE);


    a++

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 754
    Points : 376
    Points
    376
    Par défaut
    Joel, je vais regarder ça merci !

    adiGuba, je me sers du premier uniquement pour créer le fichier. (C'est surement sale, mais à partir du moment où je ferme bien le flux ça ne me pose pas de problème).
    Pour le toPath, effectivement c'est ce que Joel disait, je vais regarder.

  7. #7
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Amnael Voir le message
    adiGuba, je me sers du premier uniquement pour créer le fichier. (C'est surement sale, mais à partir du moment où je ferme bien le flux ça ne me pose pas de problème).
    C'est sale, c'est inutile, et cela pourrait même te faire perdre le contenu de ton fichier...

    ll n'y a aucune raison de faire cela...


    a++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET] Suppression d'un fichier chargé dans un WebBrowser
    Par Vonotar dans le forum Windows Forms
    Réponses: 9
    Dernier message: 27/09/2004, 11h09
  2. Réponses: 4
    Dernier message: 22/12/2003, 11h12
  3. Réponses: 8
    Dernier message: 14/11/2003, 22h51
  4. Réponses: 2
    Dernier message: 11/08/2003, 13h43
  5. [LG]suppression dans un fichier
    Par cedrick essale dans le forum Langage
    Réponses: 5
    Dernier message: 10/08/2003, 15h22

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