Bonjour,
Je développe une application dont l'objectif est de faire une surveillance d'un répertoire RepA ainsi que ses sous répertoires SousRepA.
Lors d'un ajout d'un fichier .TXT dans un sous répertoire SousRepA celui-ci est copié à la racine RepA et son contenu est transféré dans la base de données.
Tout fonctionne avec ce bout de code :
Le problème : quand je fais un test de copier/coller simultané de 5 fichiers .TXT dans un sous répertoire SousRepA il ne traite que Un Seul Fichier et les 4 fichiers sont oubliés par l'application. Car l'objectif est qu'après la copie dans RepA, le contenu soit envoyé à la base, on supprime le fichier pour passer au suivant qui arrive en copie depuis SousRepA comme si on traitait une file d'attente.
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 RepIn est une chaîne = "C:\RepA" PROCEDURE _TraitementRépertoire(sNomRépertoire est une chaîne, sNomFichier est une chaîne, nTypeChangement est un entier, sParamètre) sMessage est une chaîne sElément est une chaîne = sNomRépertoire + ["\"] + sNomFichier res est un booléen SELON nTypeChangement CAS fsSuppressionFichier ..... CAS fsCréationFichier // On teste l'existence du fichier, s'il n'existe pas, c'est un répertoire SI fFichierExiste(sElément) = Faux ALORS // C'est un répertoire sMessage = ChaîneConstruit("Le répertoire <%1> a été ajouté", sElément) SINON sMessage = ChaîneConstruit("Le fichier <%1> a été ajouté", sElément) //si création d'un nouveau fichier on le transfert dans le répertoire principal SI PAS(sElément [~] "SousRepA") ALORS// on vérifie que c'est pas le dossier SousRepA avant HImporteTexte(TABLE_DONNEES, sElément, "Champ1, Champ2, Champ3, Champ4, Champ5, Champ6", "," + Caract(127) + """" + Caract(127) + RC + Caract(127) + ".",hImpTestDoublon)//hImpCréation) FIN //On supprime chaque fichier du répertoire RepA avant d'y copier un autre. SI fFichierExiste(RepIn + "\fichier.txt")=Vrai ET sElément <> RepIn + "\fichier.txt" ALORS // Si c'est le même répertoire pas de suppression fSupprime(RepIn + "\fichier.txt") FIN res = fCopieFichier(sElément, RepIn + "\ fichier.txt")//une copie est une nouvelle création de fichier TableAffiche(TABLE_ DONNEES, taDébut) FIN CAS fsRenommage .... CAS fsModificationFichier .... AUTRE CAS ..... FIN
J'ai cherché la solution du coté des sémaphores et Treads mais sans succès:
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
55
56
57
58
59
60
61
62
63
64 SémaphoreCrée("SM_LIMITE") ..... RepIn est une chaîne = "C:\RepA" PROCEDURE _TraitementRépertoire(sNomRépertoire est une chaîne, sNomFichier est une chaîne, nTypeChangement est un entier, sParamètre) sMessage est une chaîne sElément est une chaîne = sNomRépertoire + ["\"] + sNomFichier res est un booléen SémaphoreDébut("SM_LIMITE") SELON nTypeChangement CAS fsSuppressionFichier ..... CAS fsCréationFichier // On teste l'existence du fichier, s'il n'existe pas, c'est un répertoire SI fFichierExiste(sElément) = Faux ALORS // C'est un répertoire sMessage = ChaîneConstruit("Le répertoire <%1> a été ajouté", sElément) SINON sMessage = ChaîneConstruit("Le fichier <%1> a été ajouté", sElément) //si création d'un nouveau fichier on le transfert dans le répertoire principal SI PAS(sElément [~] "SousRepA") ALORS// on vérifie que c'est pas le dossier SAV avant HImporteTexte(TABLE_DONNEES, sElément, "Champ1, Champ2, Champ3, Champ4, Champ5, Champ6", "," + Caract(127) + """" + Caract(127) + RC + Caract(127) + ".",hImpTestDoublon)//hImpCréation) FIN //On supprime chaque fichier du répertoire RepA avant d'y copier un autre. SI fFichierExiste(RepIn + "\fichier.txt")=Vrai ET sElément <> RepIn + "\fichier.txt" ALORS // Si c'est le même répertoire pas de suppression fSupprime(RepIn + "\fichier.txt") FIN res = fCopieFichier(sElément, RepIn + "\ fichier.txt")//une copie est une nouvelle création de fichier TableAffiche(TABLE_ DONNEES, taDébut) FIN CAS fsRenommage .... CAS fsModificationFichier .... AUTRE CAS ..... FIN SémaphoreFin("SM_LIMITE") . . SémaphoreDétruit("SM_LIMITE")
Une idée ?
Merci d'avance
Partager