Test de l'utilisation d'un fichier en VB6 [Résolu]

Signaler
Messages postés
5
Date d'inscription
mercredi 2 juillet 2008
Statut
Membre
Dernière intervention
3 juillet 2008
-
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
Bonjour,

Dans mon application, je reçois des fichers toutes les 2 secondes, et je dois les analyser pour extraire le contenu intéressant et l'afficher à l'utilisateur. J'ai fait une boucle qui regarde périodiquement dans le dossier pour savoir si le fichier existe, et si il existe, je l'ouvre.

Le problème est que si j'ouvre le fichier quand il est en train d'être écrit, j'ai une erreur lors de l'analyse. Il faudrait donc que je sache si il est utilisé, et dans ce cas j'attends qu'il ne soit plus utilisé pour l'ouvrir.

Pourriez-vous m'aider svp ?

D'avance merci.

13 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
a tout hasard, pas moyen de se fier au contenu, pour savoir si le fichier est complet ?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
"bricolage", certes...

je fais ainsi, dans un outil vte fait pour el boulot (même genre de process)

Private Sub ViewAFP(ByRef vsPath As String, ByRef vsFileName As String)
Dim hFile As Long
Static sOldFileName As String
Static nOldFileSize As Long
Static dOldFileTime As Date
hFile = CreateFile(vsPath & vsFileName, GENERIC_WRITE, 0, ByVal 0&, OPEN_EXISTING, 0, 0)
If hFile <> -1 Then
CloseHandle hFile
DoEvents

If sOldFileName <> vsPath & vsFileName Or _
nOldFileSize <> FileLen(vsPath & vsFileName) Or _
dOldFileTime <> FileDateTime(vsPath & vsFileName) Then
sOldFileName = vsPath & vsFileName
nOldFileSize = FileLen(sOldFileName)
dOldFileTime = FileDateTime(sOldFileName)

On Local Error Resume Next
Shell App.Path & "\NopViewer.exe """ & vsPath & vsFileName & ChrW$(34), vbNormalFocus
On Local Error GoTo 0
End If
End If
End Sub
Messages postés
5
Date d'inscription
mercredi 2 juillet 2008
Statut
Membre
Dernière intervention
3 juillet 2008

La fonction CreateFile ne fonctionne pas dans ce cas : le fichier n'est pas bloqué. Je vais plutôt m'orienter vers la surveillance de la taille du fichier : je connais la taille minimale qu'il doit avoir, je considère donc qu'il en train d'être écrit si sa taille est inférieure à la taille minimale, et je l'ouvre ensuite.


Je posterai pour donner le résultat.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
ah, ok, si le fichier n'est pas bloqué, alors...
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
Bonjour,

A tout hasard, la fonction "RESET" a des chances de règler ton problème, puisqu'elle ferme en lecture ou en écriture tout les fichier...

Amicalement,
Us.
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
... si le fichier est ouvert avec OPEN...

Us.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
euh, oui, mais non...
je veux dire, on va pas couper l'herbe sous le pied au programme externe qui est en train de produire notre fichier...

on attend juste que la génération soit finie ^^
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
Ou d'agir sur les attributs du fichier... idée simple, mettre un attribut "Lecture Seule" après écriture... cela demande de pouvoir agir sur le programe externe...

Us.
Messages postés
5
Date d'inscription
mercredi 2 juillet 2008
Statut
Membre
Dernière intervention
3 juillet 2008

Le fichier attendu est un fichier binaire que je lis en mettant chaque octet dans une case de tableau. Le tableau fait la taille du fichier. Ensuire, j'ai un programme qui accède à certaines cases de ce tableau.

Le problème se situait au niveau de cet accès, puisque quand le fichier n'était pas complètement écrit, le tableau ne contenait pas assez de cases.

Maintenant, j'ai résolu mon problème : quand je repère que mon fichier existe, je fais un test pour savoir si la taille (j'utilise FileLen) est supérieure à la taille minimale attendue et si c'est bon, j'ouvre le fichier. Sinon, j'attends un peu avant d'ouvrir le fichier. Ca revient un peu à ce que tu proposes sauf que je n'utilise pas le contenu mais seulement la taille du fichier, ce qui est suffisant dans mon cas.
Messages postés
5
Date d'inscription
mercredi 2 juillet 2008
Statut
Membre
Dernière intervention
3 juillet 2008

Merci pour le coup de main
Messages postés
40
Date d'inscription
mardi 4 octobre 2005
Statut
Membre
Dernière intervention
2 mars 2009

Proposition d'un code simple

On Error Goto PasFini
Name Nomdufichier As Nomdufichier & ".Lu"
'traitement de Nomdufichier & ".Lu"

PasFini:
exit sub
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
un appel a l'API CreateFile en demandant l'exclusivité te fixera rapidement