Bonjour,
ma question est simple (mais je n'ai pas de réponse):
comment vérifier qu'un fichier est déjà ouvert ?
(pour empêcher de faire un traitement dessus alors qu'on ne peut pas le modifier...)
Merci à vous !
Bonjour,
ma question est simple (mais je n'ai pas de réponse):
comment vérifier qu'un fichier est déjà ouvert ?
(pour empêcher de faire un traitement dessus alors qu'on ne peut pas le modifier...)
Merci à vous !
Une solution que j'ai utilisé, c'est pas forcément la meilleur.
J'essaye d'ouvrir un flux dessus si ça plante il est pas dispo et je boucle jusqu'a qu'il soit dispo.
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 while(!isFree){ try { fileInputStream =new FileInputStream(files[0]); isFree=true; } catch (FileNotFoundException e) { try { Thread.sleep(parametrage.getSleepTimeCheckFile());//attend un temps défini dans un fichier properties avant de boucler } catch (InterruptedException e1) { treatError(e1,rootLogger); } }finally{ if(fileInputStream!=null){ try { fileInputStream.close(); } catch (IOException e) { treatError(e,rootLogger); } } } }
Je ne comprends pas très bien...![]()
Si j'ai bien compris, le code (une fois complété à ma manière) donne ça :
Mais je ne comprends pas comment ça marche...
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 public void maMethode() { FileInputStream fileInputStream = null; boolean isFree = false; while (!isFree) { try { fileInputStream = new FileInputStream(new File( "C:\\monFichier.txt")); isFree = true; } catch (FileNotFoundException e) { try { Thread.sleep(500); } catch (InterruptedException e1) { } } finally { if (fileInputStream != null) { try { fileInputStream.close(); } catch (IOException e) { } } } } }
(dsl d'être aussi nul, mais je ne vois vraiment pas...)![]()
en fait si le fichier est en cours de modification par un autre programme, la commande new FileInputStream(...) renvoie une FileNotFoundException donc tant que je ne peut pas le manipuler je n'y touche pas et j'attend. Une fois que je peux le manipuler je continue mon traitement.Envoyé par n@n¤u
Bien sur tu as intérêt à être sur que ton fichier existe sinon gare à la boucle infini. Tu peut aussi rajouter un système de timeout pour éviter le problème de boucle infini.
Ok, je vois mieux.
Mais ce que je veux c'est uniquement tester si je peux le modifier ou pas.
(si je ne peux pas, j'arrête le traitement et je préviens l'utilisateur...)
N'y aurait-il pas une méthode plus simple ?
dans ce cas enlève la boucle while, dans mon cas je devait attendre c'est pour ça.Envoyé par n@n¤u
Un simple if/else devrait fait l'affaire pour toi.
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 public void maMethode() { FileInputStream fileInputStream = null; boolean isFree = null; try { fileInputStream = new FileInputStream(new File("C:\\monFichier.txt")); isFree = true; } catch (FileNotFoundException e) { isFree = false; } finally { if (fileInputStream != null) { try { fileInputStream.close(); } catch (IOException e) { } } } if(isFree) System.out.println("C'est OK"); else System.out.println("C'est mort"); }
Partager