Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème fichier déjà ouvert, réponses rigolotes...

6 réponses
Avatar
surfeur75
Bonjour,

J'ai un problème de fichier déjà ouvert, et je n'ai eu que des réponses
étranges, genre "utilise FreeFile", évidemment que je l'utilise!
Une autre réponse fut plus forte "En utilisant correctement FreeFile, on ne
peut pas avoir (fichier déjà ouvert)", ça c'est fort comme réponse, intense
et vibrant...

Il suffit de prendre un petit exemple pour démontrer labsurdité de ces
réponses (erreur à adresse "1:"):
Sub Form_Load()
Dim pf1 As Long: Dim pf2 As Long
ChDrive App.Path: ChDir App.Path
pf1 = FreeFile
Open "test1.txt" For Append As pf1
pf2 = FreeFile
1: Open "test1.txt" For Binary As pf2 ' FICHIER DEJA OUVERT ICI !!!
Reset
End Sub

Bon, à part ça, j'ai toujours mon problème, moi, à savoir que j'ai des
erreurs "fichier déjà ouvert", mais que je n'arrive pas à localiser le
fichier concerné ni le pointeur qui le gère dans trois mètres de code, plein
de fichiers et procédures, alors la question est: Y a -t-il une méthode pour
savoir quels sont les pointeurs qui gèrent encore des fichier au moment de
l'erreur, a fin de localisation?
Merci.
--
@+, bye, Joe.
Pour m'écrire ng75AROBASEnoosPOINTfr
remplace AROBASE et POINT par leur vrai signe
Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!

6 réponses

Avatar
Patrice Henrio
Là ça dépasse mes compétences. Désolé.
"surfeur75" a écrit dans le message de
news:
Bonjour,

J'ai un problème de fichier déjà ouvert, et je n'ai eu que des


réponses
étranges, genre "utilise FreeFile", évidemment que je l'utilise!
Une autre réponse fut plus forte "En utilisant correctement FreeFile, on


ne
peut pas avoir (fichier déjà ouvert)", ça c'est fort comme réponse,


intense
et vibrant...

Il suffit de prendre un petit exemple pour démontrer labsurdité de ces
réponses (erreur à adresse "1:"):
Sub Form_Load()
Dim pf1 As Long: Dim pf2 As Long
ChDrive App.Path: ChDir App.Path
pf1 = FreeFile
Open "test1.txt" For Append As pf1
pf2 = FreeFile
1: Open "test1.txt" For Binary As pf2 ' FICHIER DEJA OUVERT ICI !!!
Reset
End Sub

Bon, à part ça, j'ai toujours mon problème, moi, à savoir que j'ai des
erreurs "fichier déjà ouvert", mais que je n'arrive pas à localiser le
fichier concerné ni le pointeur qui le gère dans trois mètres de code,


plein
de fichiers et procédures, alors la question est: Y a -t-il une méthode


pour
savoir quels sont les pointeurs qui gèrent encore des fichier au moment de
l'erreur, a fin de localisation?
Merci.
--
@+, bye, Joe.
Pour m'écrire ng75AROBASEnoosPOINTfr
remplace AROBASE et POINT par leur vrai signe
Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!






Avatar
François Picalausa
Bonjour/soir,

"surfeur75" a écrit dans le message de
news:
j'ai des erreurs "fichier déjà ouvert", mais que je n'arrive pas à
localiser le fichier concerné ni le pointeur qui le gère dans trois
mètres de code, plein de fichiers et procédures, alors la question
est: Y a -t-il une méthode pour savoir quels sont les pointeurs qui
gèrent encore des fichier au moment de l'erreur, a fin de
localisation?



Fichier déjà ouvert ne signifie pas uniquement "Pointeur déjà utilisé" (si
on peut parler de pointeur en VB?) mais aussi "fichier avec un lock
quelconque (=fichier en cours d'utilisation par ce programme ou un autre)"!
Je pense que la réponse "En utilisant correctement FreeFile, on ne peut pas
avoir (fichier déjà ouvert)" ne concernait que le cas "pointeur déjà
utilisé" et non l'autre...

Uniquement pour le débuggage (le code n'est pas des plus solides), pour
tester si un fichier est déjà ouvert, tu peux essayer quelquechose comme
ceci:
#Const DebugMode = 1

Private Sub Form_Load()
Dim FFN As Integer

FFN = FreeFile
Open "e:test.txt" For Binary As FFN

Debug.Print IsFileNumber(FFN)
Debug.Print IsFileNumber(1)
Debug.Print IsFileNumber(2)

Close FFN

End Sub

#If DebugMode Then
Private Function IsFileNumber(FileNumber As Integer) As Boolean
On Error GoTo ErrHandler
Open App.Path & "Opentest.tmp" For Binary As FileNumber
Close FileNumber
Kill App.Path & "Opentest.tmp"

ErrHandler:
Select Case Err.Number
Case 0
IsFileNumber = False
Case 55
IsFileNumber = True
Case Else
Err.Raise Err.Number, _
Err.Source, _
Err.Description, _
Err.HelpFile, _
Err.HelpContext
End Select
End Function
#End If

Tu peux aussi plus simplement connaitre le dernier fichier ouvert en
utilisant FreeFile -1

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
Avatar
EddiGordo
Bonjour

Effectivement, ma réponse ne portait que sur le cas d'une tentative
d'utilisation du même numéro de canal plusieurs fois...

Je n'avais pas compris que ton code ouvrais plusieurs fois le même
fichier...

Mea culpa c'est ma très grande faute.... ;-)


--
Enjoy !
Avatar
nullus premier
Je me demande si ce n'est pas tout simplement le mode
d'ouverture ?
En mode append, tu envisages une écriture, et le system
bloque peut-être les autres accés, alors qu'en mode
lecture, pas de soucis !
Et en ouvrant en binary avant l'append ??

Mais je suis OK avec toi, pour dire que les réponses sont
souvent n'importe quoi, car ne lisant pas attentivement
les explications du problème !
De plus, pour suivre les réponses, il faut remonter au
moment où tu as laissé ta question, alors que bien des
forums les classes par ordre de dernière intervention !

-----Message d'origine-----
Bonjour,

J'ai un problème de fichier déjà ouvert, et je n'ai


eu que des réponses
étranges, genre "utilise FreeFile", évidemment que je


l'utilise!
Une autre réponse fut plus forte "En utilisant


correctement FreeFile, on ne
peut pas avoir (fichier déjà ouvert)", ça c'est fort


comme réponse, intense
et vibrant...

Il suffit de prendre un petit exemple pour démontrer


labsurdité de ces
réponses (erreur à adresse "1:"):
Sub Form_Load()
Dim pf1 As Long: Dim pf2 As Long
ChDrive App.Path: ChDir App.Path
pf1 = FreeFile
Open "test1.txt" For Append As pf1
pf2 = FreeFile
1: Open "test1.txt" For Binary As pf2 ' FICHIER DEJA


OUVERT ICI !!!
Reset
End Sub

Bon, à part ça, j'ai toujours mon problème, moi, à


savoir que j'ai des
erreurs "fichier déjà ouvert", mais que je n'arrive pas à


localiser le
fichier concerné ni le pointeur qui le gère dans trois


mètres de code, plein
de fichiers et procédures, alors la question est: Y a -t-


il une méthode pour
savoir quels sont les pointeurs qui gèrent encore des


fichier au moment de
l'erreur, a fin de localisation?
Merci.
--
@+, bye, Joe.
Pour m'écrire ng75AROBASEnoosPOINTfr
remplace AROBASE et POINT par leur vrai signe
Il l'a fait car il ne savait pas que c'était impossible,


alea jacta est!




.



Avatar
Philippe ILLINGER
Bonjour,

"surfeur75" wrote in message
news:
Bonjour,

J'ai un problème de fichier déjà ouvert, et je n'ai eu que des


réponses
étranges, genre "utilise FreeFile", évidemment que je l'utilise!
Une autre réponse fut plus forte "En utilisant correctement FreeFile, on


ne
peut pas avoir (fichier déjà ouvert)", ça c'est fort comme réponse,


intense
et vibrant...

Il suffit de prendre un petit exemple pour démontrer labsurdité de ces
réponses (erreur à adresse "1:"):
Sub Form_Load()
Dim pf1 As Long: Dim pf2 As Long
ChDrive App.Path: ChDir App.Path
pf1 = FreeFile
Open "test1.txt" For Append As pf1
pf2 = FreeFile
1: Open "test1.txt" For Binary As pf2 ' FICHIER DEJA OUVERT ICI !!!
Reset
End Sub



Sans en avoir fait l'essai, je dirai qu'en rendant la main au systeme pour
qu'il Ferme effectivement la ressource, devrait fonctionner.
Par le biai d'un DoEvents par exemple.

De nombreux programmeurs oublient souvent que la programmation VB est
Evenementielle et non plus Sequentielle comme sous DOS, et que cela a des
concequences sur la maniere d'arranger les lignes de code qui font appel à
des ressources systemes (comme les fichiers par ex) !!!

Best Regards



---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.560 / Virus Database: 352 - Release Date: 08/01/2004
Avatar
Patrice Henrio
Je voudrai répondre au sentiment du n'importe quoi évoqué dans cette
conversation. J'apprécie beaucoup ce forum car contrairement à beaucoup
d'autre il accepte d'aider les demandeurs dans toutes les situations
relevant du forum sans apporter de jugement de valeur sur la question ni
sur la réponse. Très souvent la réponse est inadaptée car elle interprète la
question suivant l'expérience personnelle. cela ne provient pas d'une
"mauvaise lecture" ou tout du moins celle-ci s'explique par le fait que l'on
réagit selon sa propre expérience, on croit reconnaître le problème évoqué
parce que l'on a rencontré le même et on répond tout de suite la solution
que l'on avait trouvé après de nombreuses recherches.
Mais par pitié conservons à ce forum son ambiance sympathique où chacun
apporte sa pierre à l'édifice en fonction de ses compétences. et surtout
encourageons plutôt chacun à s'exprimer, à recevoir des conseils puis à en
apporter soi-même.
Restons une communauté. "Gens una sumus".
"Philippe ILLINGER" a écrit dans le
message de news:
Bonjour,

"surfeur75" wrote in message
news:
> Bonjour,
>
> J'ai un problème de fichier déjà ouvert, et je n'ai eu que des
réponses
> étranges, genre "utilise FreeFile", évidemment que je l'utilise!
> Une autre réponse fut plus forte "En utilisant correctement FreeFile, on
ne
> peut pas avoir (fichier déjà ouvert)", ça c'est fort comme réponse,
intense
> et vibrant...
>
> Il suffit de prendre un petit exemple pour démontrer labsurdité de


ces
> réponses (erreur à adresse "1:"):
> Sub Form_Load()
> Dim pf1 As Long: Dim pf2 As Long
> ChDrive App.Path: ChDir App.Path
> pf1 = FreeFile
> Open "test1.txt" For Append As pf1
> pf2 = FreeFile
> 1: Open "test1.txt" For Binary As pf2 ' FICHIER DEJA OUVERT ICI !!!
> Reset
> End Sub

Sans en avoir fait l'essai, je dirai qu'en rendant la main au systeme pour
qu'il Ferme effectivement la ressource, devrait fonctionner.
Par le biai d'un DoEvents par exemple.

De nombreux programmeurs oublient souvent que la programmation VB est
Evenementielle et non plus Sequentielle comme sous DOS, et que cela a des
concequences sur la maniere d'arranger les lignes de code qui font appel à
des ressources systemes (comme les fichiers par ex) !!!

Best Regards



---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.560 / Virus Database: 352 - Release Date: 08/01/2004