J'ai une procédure qui s'occupe d'ouvrir un fichier :
sub Ouvrir()
dim nf as integer
nf=freefile
open fichier for binary as nf
end sub
si dans la suite du programme, je perds le handle (du moins sa valeur) "nf",
quel(s) moyen(s) ai(ent)-je pour fermer ce fichier ?
par exemple, si par erreur, j'appelle 2 fois la fonction Ouvrir() il me
faudra faire 2 close pour fermer complètement le fichier, or le premier
handle me sera inconnu !!
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
naudy cédric
nf est déclaré dans la sub "ouvrir". Ainsi, sa portée ne dépasse pas cette sub. Lorsque l'on passe sur end sub, votre variable n'existe plus...
Mettez la déclaration de nf au niveau global et vous ne le perdrez pas.
Cédric
"PurL" wrote in message news:
Bonjour,
J'ai une procédure qui s'occupe d'ouvrir un fichier :
sub Ouvrir() dim nf as integer
nf=freefile open fichier for binary as nf end sub
si dans la suite du programme, je perds le handle (du moins sa valeur)
"nf",
quel(s) moyen(s) ai(ent)-je pour fermer ce fichier ?
par exemple, si par erreur, j'appelle 2 fois la fonction Ouvrir() il me faudra faire 2 close pour fermer complètement le fichier, or le premier handle me sera inconnu !!
Merci pour votre aide,
PurL
nf est déclaré dans la sub "ouvrir".
Ainsi, sa portée ne dépasse pas cette sub. Lorsque l'on passe sur end sub,
votre variable n'existe plus...
Mettez la déclaration de nf au niveau global et vous ne le perdrez pas.
Cédric
"PurL" <purl-nospam@chez.com> wrote in message
news:uHRrsWYkDHA.1740@TK2MSFTNGP12.phx.gbl...
Bonjour,
J'ai une procédure qui s'occupe d'ouvrir un fichier :
sub Ouvrir()
dim nf as integer
nf=freefile
open fichier for binary as nf
end sub
si dans la suite du programme, je perds le handle (du moins sa valeur)
"nf",
quel(s) moyen(s) ai(ent)-je pour fermer ce fichier ?
par exemple, si par erreur, j'appelle 2 fois la fonction Ouvrir() il me
faudra faire 2 close pour fermer complètement le fichier, or le premier
handle me sera inconnu !!
nf est déclaré dans la sub "ouvrir". Ainsi, sa portée ne dépasse pas cette sub. Lorsque l'on passe sur end sub, votre variable n'existe plus...
Mettez la déclaration de nf au niveau global et vous ne le perdrez pas.
Cédric
"PurL" wrote in message news:
Bonjour,
J'ai une procédure qui s'occupe d'ouvrir un fichier :
sub Ouvrir() dim nf as integer
nf=freefile open fichier for binary as nf end sub
si dans la suite du programme, je perds le handle (du moins sa valeur)
"nf",
quel(s) moyen(s) ai(ent)-je pour fermer ce fichier ?
par exemple, si par erreur, j'appelle 2 fois la fonction Ouvrir() il me faudra faire 2 close pour fermer complètement le fichier, or le premier handle me sera inconnu !!
Merci pour votre aide,
PurL
PurL
naudy cédric wrote:
nf est déclaré dans la sub "ouvrir". Ainsi, sa portée ne dépasse pas cette sub. Lorsque l'on passe sur end sub, votre variable n'existe plus...
Mettez la déclaration de nf au niveau global et vous ne le perdrez pas.
Cédric
Je suis d'accord :) là n'est pas le probleme
La question est : Comment fermer un fichier dont on ne connait pas le handle fourni à l'ouverture ?
Merci
PurL
naudy cédric wrote:
nf est déclaré dans la sub "ouvrir".
Ainsi, sa portée ne dépasse pas cette sub. Lorsque l'on passe sur end
sub, votre variable n'existe plus...
Mettez la déclaration de nf au niveau global et vous ne le perdrez
pas.
Cédric
Je suis d'accord :) là n'est pas le probleme
La question est : Comment fermer un fichier dont on ne connait pas le handle
fourni à l'ouverture ?
nf est déclaré dans la sub "ouvrir". Ainsi, sa portée ne dépasse pas cette sub. Lorsque l'on passe sur end sub, votre variable n'existe plus...
Mettez la déclaration de nf au niveau global et vous ne le perdrez pas.
Cédric
Je suis d'accord :) là n'est pas le probleme
La question est : Comment fermer un fichier dont on ne connait pas le handle fourni à l'ouverture ?
Merci
PurL
Olivier Besson
Tu lis l'aide de close et tu vois que si tu fait un close sans rien d'autre ça ferme tous les fichiers ouverts par ton application. C'est la seule solution simple.
--
Olivier Besson Pour m'ecrire, supprimer le premier point de mon adresse. (Je ne lis pas mes mails frequement) To write me, remove first dot of my address (i don't read my mails very frequently).
"PurL" a écrit dans le message de news:
naudy cédric wrote: > nf est déclaré dans la sub "ouvrir". > Ainsi, sa portée ne dépasse pas cette sub. Lorsque l'on passe sur end > sub, votre variable n'existe plus... > > Mettez la déclaration de nf au niveau global et vous ne le perdrez > pas. > > Cédric
Je suis d'accord :) là n'est pas le probleme
La question est : Comment fermer un fichier dont on ne connait pas le
handle
fourni à l'ouverture ?
Merci
PurL
Tu lis l'aide de close et tu vois que si tu fait un close sans rien d'autre
ça ferme tous les fichiers ouverts par ton application. C'est la seule
solution simple.
--
Olivier Besson
Pour m'ecrire, supprimer le premier point de mon adresse.
(Je ne lis pas mes mails frequement)
To write me, remove first dot of my address (i don't read my mails very
frequently).
"PurL" <purl-nospam@chez.com> a écrit dans le message de news:
uQNyESZkDHA.2432@TK2MSFTNGP10.phx.gbl...
naudy cédric wrote:
> nf est déclaré dans la sub "ouvrir".
> Ainsi, sa portée ne dépasse pas cette sub. Lorsque l'on passe sur end
> sub, votre variable n'existe plus...
>
> Mettez la déclaration de nf au niveau global et vous ne le perdrez
> pas.
>
> Cédric
Je suis d'accord :) là n'est pas le probleme
La question est : Comment fermer un fichier dont on ne connait pas le
Tu lis l'aide de close et tu vois que si tu fait un close sans rien d'autre ça ferme tous les fichiers ouverts par ton application. C'est la seule solution simple.
--
Olivier Besson Pour m'ecrire, supprimer le premier point de mon adresse. (Je ne lis pas mes mails frequement) To write me, remove first dot of my address (i don't read my mails very frequently).
"PurL" a écrit dans le message de news:
naudy cédric wrote: > nf est déclaré dans la sub "ouvrir". > Ainsi, sa portée ne dépasse pas cette sub. Lorsque l'on passe sur end > sub, votre variable n'existe plus... > > Mettez la déclaration de nf au niveau global et vous ne le perdrez > pas. > > Cédric
Je suis d'accord :) là n'est pas le probleme
La question est : Comment fermer un fichier dont on ne connait pas le
handle
fourni à l'ouverture ?
Merci
PurL
PurL
Olivier Besson wrote:
Tu lis l'aide de close et tu vois que si tu fait un close sans rien d'autre ça ferme tous les fichiers ouverts par ton application.
Oui je sais, mais encore une fois, ce n'est pas l'objet de ma question :) Je ne veux pas fermer TOUS les fichiers (j'en ai d'autres ouverts par l'application qui ne doivent pas etre fermés) mais fermer UN fichier dont je ne connais plus le handle...
C'est la seule solution simple.
Citation de moi : "La complexité d'une solution n'a aucune importance dans le cas où celle-ci résoud un probleme sans en créer d'autres"
PurL
Olivier Besson wrote:
Tu lis l'aide de close et tu vois que si tu fait un close sans rien
d'autre ça ferme tous les fichiers ouverts par ton application.
Oui je sais, mais encore une fois, ce n'est pas l'objet de ma question :)
Je ne veux pas fermer TOUS les fichiers (j'en ai d'autres ouverts par
l'application qui ne doivent pas etre fermés)
mais fermer UN fichier dont je ne connais plus le handle...
C'est la seule solution simple.
Citation de moi :
"La complexité d'une solution n'a aucune importance dans le cas où celle-ci
résoud un probleme sans en créer d'autres"
Tu lis l'aide de close et tu vois que si tu fait un close sans rien d'autre ça ferme tous les fichiers ouverts par ton application.
Oui je sais, mais encore une fois, ce n'est pas l'objet de ma question :) Je ne veux pas fermer TOUS les fichiers (j'en ai d'autres ouverts par l'application qui ne doivent pas etre fermés) mais fermer UN fichier dont je ne connais plus le handle...
C'est la seule solution simple.
Citation de moi : "La complexité d'une solution n'a aucune importance dans le cas où celle-ci résoud un probleme sans en créer d'autres"
PurL
Olivier Besson
Citation de moi : "Tu l'auras voulu". 1) Trouve le process_id de ton application (EnumProcesses) 2) Parcours tous les handles dont le owner_id == TonApplication_process_id (NtQuerySystemInformation) 3) Récupère le nom de chaque handle (NtQueryObject) 4) Lorsque tu as le bon nom, tu peux le fermer.
Bien sur, tout ça c'est de l'API donc bonne recherche ...
(Il y a surement une solution plus simple à ton problème, en encapsulant les commandes de fichier dans une classe, ou en posant un hook sur les ouvertures de fichiers de ton application).
--
Olivier Besson Pour m'ecrire, supprimer le premier point de mon adresse. (Je ne lis pas mes mails frequement) To write me, remove first dot of my address (i don't read my mails very frequently).
"PurL" a écrit dans le message de news:
Olivier Besson wrote: > Tu lis l'aide de close et tu vois que si tu fait un close sans rien > d'autre ça ferme tous les fichiers ouverts par ton application.
Oui je sais, mais encore une fois, ce n'est pas l'objet de ma question :) Je ne veux pas fermer TOUS les fichiers (j'en ai d'autres ouverts par l'application qui ne doivent pas etre fermés) mais fermer UN fichier dont je ne connais plus le handle...
> C'est la seule solution simple.
Citation de moi : "La complexité d'une solution n'a aucune importance dans le cas où
celle-ci
résoud un probleme sans en créer d'autres"
PurL
Citation de moi :
"Tu l'auras voulu".
1) Trouve le process_id de ton application (EnumProcesses)
2) Parcours tous les handles dont le owner_id == TonApplication_process_id
(NtQuerySystemInformation)
3) Récupère le nom de chaque handle (NtQueryObject)
4) Lorsque tu as le bon nom, tu peux le fermer.
Bien sur, tout ça c'est de l'API donc bonne recherche ...
(Il y a surement une solution plus simple à ton problème, en encapsulant les
commandes de fichier dans une classe, ou en posant un hook sur les
ouvertures de fichiers de ton application).
--
Olivier Besson
Pour m'ecrire, supprimer le premier point de mon adresse.
(Je ne lis pas mes mails frequement)
To write me, remove first dot of my address (i don't read my mails very
frequently).
"PurL" <purl-nospam@chez.com> a écrit dans le message de news:
ehrW2likDHA.2216@TK2MSFTNGP12.phx.gbl...
Olivier Besson wrote:
> Tu lis l'aide de close et tu vois que si tu fait un close sans rien
> d'autre ça ferme tous les fichiers ouverts par ton application.
Oui je sais, mais encore une fois, ce n'est pas l'objet de ma question :)
Je ne veux pas fermer TOUS les fichiers (j'en ai d'autres ouverts par
l'application qui ne doivent pas etre fermés)
mais fermer UN fichier dont je ne connais plus le handle...
> C'est la seule solution simple.
Citation de moi :
"La complexité d'une solution n'a aucune importance dans le cas où
Citation de moi : "Tu l'auras voulu". 1) Trouve le process_id de ton application (EnumProcesses) 2) Parcours tous les handles dont le owner_id == TonApplication_process_id (NtQuerySystemInformation) 3) Récupère le nom de chaque handle (NtQueryObject) 4) Lorsque tu as le bon nom, tu peux le fermer.
Bien sur, tout ça c'est de l'API donc bonne recherche ...
(Il y a surement une solution plus simple à ton problème, en encapsulant les commandes de fichier dans une classe, ou en posant un hook sur les ouvertures de fichiers de ton application).
--
Olivier Besson Pour m'ecrire, supprimer le premier point de mon adresse. (Je ne lis pas mes mails frequement) To write me, remove first dot of my address (i don't read my mails very frequently).
"PurL" a écrit dans le message de news:
Olivier Besson wrote: > Tu lis l'aide de close et tu vois que si tu fait un close sans rien > d'autre ça ferme tous les fichiers ouverts par ton application.
Oui je sais, mais encore une fois, ce n'est pas l'objet de ma question :) Je ne veux pas fermer TOUS les fichiers (j'en ai d'autres ouverts par l'application qui ne doivent pas etre fermés) mais fermer UN fichier dont je ne connais plus le handle...
> C'est la seule solution simple.
Citation de moi : "La complexité d'une solution n'a aucune importance dans le cas où
celle-ci
résoud un probleme sans en créer d'autres"
PurL
PurL
Olivier Besson wrote:
Citation de moi : "Tu l'auras voulu".
:)
1) Trouve le process_id de ton application (EnumProcesses) 2) Parcours tous les handles dont le owner_id = > TonApplication_process_id (NtQuerySystemInformation) 3) Récupère le nom de chaque handle (NtQueryObject) 4) Lorsque tu as le bon nom, tu peux le fermer.
Bien sur, tout ça c'est de l'API donc bonne recherche ...
evidement j'en attendais pas moins :p
Tu vois qd tu t'enerves :))
Merci,
PurL
Olivier Besson wrote:
Citation de moi :
"Tu l'auras voulu".
:)
1) Trouve le process_id de ton application (EnumProcesses)
2) Parcours tous les handles dont le owner_id = > TonApplication_process_id (NtQuerySystemInformation)
3) Récupère le nom de chaque handle (NtQueryObject)
4) Lorsque tu as le bon nom, tu peux le fermer.
Bien sur, tout ça c'est de l'API donc bonne recherche ...
1) Trouve le process_id de ton application (EnumProcesses) 2) Parcours tous les handles dont le owner_id = > TonApplication_process_id (NtQuerySystemInformation) 3) Récupère le nom de chaque handle (NtQueryObject) 4) Lorsque tu as le bon nom, tu peux le fermer.
Bien sur, tout ça c'est de l'API donc bonne recherche ...