Test de l'utilisation d'un fichier en VB6

Résolu
benvp Messages postés 5 Date d'inscription mercredi 2 juillet 2008 Statut Membre Dernière intervention 3 juillet 2008 - 2 juil. 2008 à 08:57
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 27 févr. 2009 à 22:28
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
2 juil. 2008 à 14:11
a tout hasard, pas moyen de se fier au contenu, pour savoir si le fichier est complet ?
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
2 juil. 2008 à 11:38
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
2 juil. 2008 à 11:40
"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
0
benvp Messages postés 5 Date d'inscription mercredi 2 juillet 2008 Statut Membre Dernière intervention 3 juillet 2008
2 juil. 2008 à 13:39
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
2 juil. 2008 à 14:06
ah, ok, si le fichier n'est pas bloqué, alors...
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
2 juil. 2008 à 14:08
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.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
2 juil. 2008 à 14:10
... si le fichier est ouvert avec OPEN...

Us.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
2 juil. 2008 à 14:10
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 ^^
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
2 juil. 2008 à 14:35
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.
0
benvp Messages postés 5 Date d'inscription mercredi 2 juillet 2008 Statut Membre Dernière intervention 3 juillet 2008
2 juil. 2008 à 14:37
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.
0
benvp Messages postés 5 Date d'inscription mercredi 2 juillet 2008 Statut Membre Dernière intervention 3 juillet 2008
2 juil. 2008 à 14:41
Merci pour le coup de main
0
deleplace Messages postés 40 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 2 mars 2009
27 févr. 2009 à 20:56
Proposition d'un code simple

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

PasFini:
exit sub
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
27 févr. 2009 à 22:28
un appel a l'API CreateFile en demandant l'exclusivité te fixera rapidement
0