benvp
Messages postés5Date d'inscriptionmercredi 2 juillet 2008StatutMembreDernière intervention 3 juillet 2008
-
2 juil. 2008 à 08:57
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 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.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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
benvp
Messages postés5Date d'inscriptionmercredi 2 juillet 2008StatutMembreDerniè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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 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...
benvp
Messages postés5Date d'inscriptionmercredi 2 juillet 2008StatutMembreDerniè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.