OVH Cloud OVH Cloud

Savoir si fichier ouvert, suivre ptr ???

7 réponses
Avatar
surfeur75
Bonjour,

J'ai parfois des messages "fichier déjà ouvert", et pour éviter les
conflits en multi-utilisateurs je déclare un pointeur par action-fichier
(par exp ptr1 pour fic 1 création; ptr2 pour fic 1 modif)... C'est peut être
vain, je ne sais?
Par contre avec tous ces pointeurs et fichier et accès, manifestement je ne
referme pas un fichier (bien que l'action dessus soit terminée, puisque je
suis à un autre endroit du code), et je tente de l'ouvrir involontairement
avec un autre ptr, voire le même... Mais pas facile de savoir d'où ça vient
(l'absence de fermeture), d'ou ma question:
Y a-t-il une façon de savoir quel pointeur a ouvert quel fichier, ou a
défaut, si un pointeur est actif, voire à lui faire une rab ?

Exemple, il me sort "fichier déjà ouvert", ok, mais avec quel pointeur, ce
qui m'indiquera où aller, puisque je spécialise géographiquement mes
pointeurs)...

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!

7 réponses

Avatar
EddiGordo
"surfeur75" a formulé ce jeudi :
Bonjour,

J'ai parfois des messages "fichier déjà ouvert", et pour éviter les
conflits en multi-utilisateurs je déclare un pointeur par action-fichier
(par exp ptr1 pour fic 1 création; ptr2 pour fic 1 modif)... C'est peut être
vain, je ne sais?
Par contre avec tous ces pointeurs et fichier et accès, manifestement je ne
referme pas un fichier (bien que l'action dessus soit terminée, puisque je
suis à un autre endroit du code), et je tente de l'ouvrir involontairement
avec un autre ptr, voire le même... Mais pas facile de savoir d'où ça vient
(l'absence de fermeture), d'ou ma question:
Y a-t-il une façon de savoir quel pointeur a ouvert quel fichier, ou a
défaut, si un pointeur est actif, voire à lui faire une rab ?

Exemple, il me sort "fichier déjà ouvert", ok, mais avec quel pointeur, ce
qui m'indiquera où aller, puisque je spécialise géographiquement mes
pointeurs)...

Merci.



Bonjour

Utilise la fonction FreeFile pour obtenir le plus petit numéro de canal
non utilisé...

ex:

Dim Ff1 as Long, Ff2 as long
Ff1=Freefile
Open "C:toto.Txt" for Input as Ff1
Ff2=Freefile
Open "C:toto2.Txt" for Input as Ff2
...
...
Close Ff2
Close Ff1

Comme ça tu auras moins de soucis...


En espérant que cela t'aide


--
Enjoy !
Avatar
surfeur75
Bonjour, merci de la réponse qui ne m'aide en rien, lol, j'utilise déjà
freeFile et close, évidemment!
Ce doit être des erreurs d'écriture de code, genre : je vais ailleurs avant
de fermer un fichier, mais pour identifier le bon pointeur et fichier dans
tout ce magma, ben, y a du travail, alors s'il y avait une méthode pour
savoir qui ouvre quoi à l'instant T, ce serait bien, avis aux amateurs ???
--
@+, 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!


"EddiGordo" a écrit dans le message de news:

"surfeur75" a formulé ce jeudi :
> Bonjour,
>
> J'ai parfois des messages "fichier déjà ouvert", et pour éviter les
> conflits en multi-utilisateurs je déclare un pointeur par action-fichier
> (par exp ptr1 pour fic 1 création; ptr2 pour fic 1 modif)... C'est peut


être
> vain, je ne sais?
> Par contre avec tous ces pointeurs et fichier et accès, manifestement je


ne
> referme pas un fichier (bien que l'action dessus soit terminée, puisque


je
> suis à un autre endroit du code), et je tente de l'ouvrir


involontairement
> avec un autre ptr, voire le même... Mais pas facile de savoir d'où ça


vient
> (l'absence de fermeture), d'ou ma question:
> Y a-t-il une façon de savoir quel pointeur a ouvert quel fichier, ou a
> défaut, si un pointeur est actif, voire à lui faire une rab ?
>
> Exemple, il me sort "fichier déjà ouvert", ok, mais avec quel pointeur,


ce
> qui m'indiquera où aller, puisque je spécialise géographiquement mes
> pointeurs)...
>
> Merci.

Bonjour

Utilise la fonction FreeFile pour obtenir le plus petit numéro de canal
non utilisé...

ex:

Dim Ff1 as Long, Ff2 as long
Ff1=Freefile
Open "C:toto.Txt" for Input as Ff1
Ff2=Freefile
Open "C:toto2.Txt" for Input as Ff2
...
...
Close Ff2
Close Ff1

Comme ça tu auras moins de soucis...


En espérant que cela t'aide


--
Enjoy !



Avatar
EddiGordo
Bonjour

Je regrette mais si tu utilise correctement Freefile tu ne *peux pas*
tomber en erreur "Fichier dèjà ouvert" et ce même sans faire de Close
...


--
Enjoy !
Avatar
Patrice Henrio
Pour certaines opérations un fichier ne peut pas être ouvert deux fois, même
avec un autre numéro de file.
C'est le cas par exemple avec Word, si on veut ouvrir une deuxième fois un
fichier sans le refermer on sera prévenu qu'il sera en lecture seule. le
plus souvent en fait on ne peut même pas l'ouvrir. Ce qui est normal quand
on y pense : quelles modifications prendre en compte, dans quelle ordre
fermer le fichier ... etc.
Extrait de MSDN : "Si le fichier a déjà été ouvert par un autre processus et
si le type d'accès indiqué n'est pas autorisé, l'instruction Open échoue et
une erreur se produit"

"EddiGordo" a écrit dans le message de
news:
Bonjour

Je regrette mais si tu utilise correctement Freefile tu ne *peux pas*
tomber en erreur "Fichier dèjà ouvert" et ce même sans faire de Close
...


--
Enjoy !



Avatar
surfeur75
Salut, le fic ne peut pas être ouvert 2 fois je te l'accorde, mais il sort
en erreur, vois ce bout de code, tu testes, et à l'adresse "1:" tu auras
"fichier déjà ouvert":

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
Reset
End Sub
--
@+, 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!


"Patrice Henrio" a écrit dans le
message de news:
Pour certaines opérations un fichier ne peut pas être ouvert deux fois,


même
avec un autre numéro de file.
C'est le cas par exemple avec Word, si on veut ouvrir une deuxième fois un
fichier sans le refermer on sera prévenu qu'il sera en lecture seule. le
plus souvent en fait on ne peut même pas l'ouvrir. Ce qui est normal quand
on y pense : quelles modifications prendre en compte, dans quelle ordre
fermer le fichier ... etc.
Extrait de MSDN : "Si le fichier a déjà été ouvert par un autre processus


et
si le type d'accès indiqué n'est pas autorisé, l'instruction Open échoue


et
une erreur se produit"

"EddiGordo" a écrit dans le message de
news:
> Bonjour
>
> Je regrette mais si tu utilise correctement Freefile tu ne *peux pas*
> tomber en erreur "Fichier dèjà ouvert" et ce même sans faire de Close
> ...
>
>
> --
> Enjoy !
>




Avatar
surfeur75
Salut,
Eh tu plaisantes, tu dis qu'on ne peut pas avoir "fichier déjà ouvert"
en utilisant corretement freeFile, ben voici ce code, qui avec FreeFile
corrctement utilisé, te donne tout droit à l'adresse "1: = erreur: fichier
déjà ouvert", lol, tu plaisantes où tu ne manipules jamais les fichiers?
Teste! On en reparlera...

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 ' ERREUR ICI FICHIER DEJA OUVERT !!!
Reset
End Sub

Bon, si tu n'as rien d'autre à me dire pour remédier à mon problème, tu
peux peut être ne plus toucher aux bases de données et faire tes fichiers
toi-même...
--
@+, 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!


"EddiGordo" a écrit dans le message de news:

Bonjour

Je regrette mais si tu utilise correctement Freefile tu ne *peux pas*
tomber en erreur "Fichier dèjà ouvert" et ce même sans faire de Close
...


--
Enjoy !



Avatar
Patrice Henrio
En fait je répondais au message juste au-dessus qui affirmait qu'on ne
pouvait avoir d'erreur "fichier déjà ouvert" avec FreeFile. je crois que
cela provient d'une confusion sur ce qu'est un fichier.
Pour moi un fichier c'est physique. ce sont des octets sur un support avec
des propriétés particulières (nom, extension, méthode de lecture). il me
semble que EddiGordo confond "fichier" et "stream", c'est à dire flux
d'entrée dont les propriétés sont d'abord un n° d'accès (ou de canal pour
être plus précis) et ensuite un type d'ouverture. On ne peut pas
effectivement ouvrir deux fois le même canal sans l'avoir refermé. D'où
l'utilité de freefile. pour ma part je trouve cette utilisation dangereuse
car on ne sait plus ce qui est ouvert ou non. Donc je n'utilise que des
numéros d'ouverture et je fais attention de refermer tout fichier dont je
n'ai plus besoin. Si nécessaire je stocke son contenu dans une variable.
Il est même parfois aussi efficace de refermer puis rouvrir les fichiers
dont on a besoin à plusieurs endroits du programmes. Tout dépend de la
taille de ceux-ci.
Enfin il doit être possible pour répondre à la question de départ de créer
une collection des fichiers ouverts comportant le nom du fichier et le N° du
canal de communication. Quand on ferme le canal, on retire le fichier de la
collection. Quand on veut ouvrir le fichier, on vérifie qu'il n'est pas dans
la collection.
A plus.
"surfeur75" a écrit dans le message de news:%

Salut, le fic ne peut pas être ouvert 2 fois je te l'accorde, mais il sort
en erreur, vois ce bout de code, tu testes, et à l'adresse "1:" tu auras
"fichier déjà ouvert":

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
Reset
End Sub
--
@+, 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!


"Patrice Henrio" a écrit dans le
message de news:
> Pour certaines opérations un fichier ne peut pas être ouvert deux fois,
même
> avec un autre numéro de file.
> C'est le cas par exemple avec Word, si on veut ouvrir une deuxième fois


un
> fichier sans le refermer on sera prévenu qu'il sera en lecture seule. le
> plus souvent en fait on ne peut même pas l'ouvrir. Ce qui est normal


quand
> on y pense : quelles modifications prendre en compte, dans quelle ordre
> fermer le fichier ... etc.
> Extrait de MSDN : "Si le fichier a déjà été ouvert par un autre


processus
et
> si le type d'accès indiqué n'est pas autorisé, l'instruction Open échoue
et
> une erreur se produit"
>
> "EddiGordo" a écrit dans le message de
> news:
> > Bonjour
> >
> > Je regrette mais si tu utilise correctement Freefile tu ne *peux pas*
> > tomber en erreur "Fichier dèjà ouvert" et ce même sans faire de Close
> > ...
> >
> >
> > --
> > Enjoy !
> >
>
>