Répertoire courant lors d'une association de fichiers
11 réponses
Stan
Bonjour,
je développe une appli en visual C++ ( visual studio .net ) qui exploite des
fichiers en .jpg.
J'ai fait une association de fichiers pour ouvrir cette appli
automatiquement lorsque je double-clique un fichier jpg.
Mon problème est que pour fonctionner, mon appli fait appel à d'autres
fichiers qui se trouvent sur le meme répertoire que l'appli. Lorsque je
double clique un jpg, l'appli ne trouve pas les autres fichiers nécessaires
à son fonctionnement puisque le répertoire courant est celui du jpg. Comment
retrouver en C++ le répertoire sur lequel est stocké mon appli ? Merci pour
votre aide.
je développe une appli en visual C++ ( visual studio .net ) qui exploite des fichiers en .jpg. J'ai fait une association de fichiers pour ouvrir cette appli automatiquement lorsque je double-clique un fichier jpg. Mon problème est que pour fonctionner, mon appli fait appel à d'autres fichiers qui se trouvent sur le meme répertoire que l'appli. Lorsque je double clique un jpg, l'appli ne trouve pas les autres fichiers nécessaires à son fonctionnement puisque le répertoire courant est celui du jpg. Comment retrouver en C++ le répertoire sur lequel est stocké mon appli ? Merci pour votre aide.
pour l'inspiration : une application reçoit, en général, automatiquement comme paramètre, son chemin d'accès complet par ex dans un code en Delphi, j'ai
CHEMINDEFAUT = ParamStr( 0) ; dans CHEMINDEFAUT je recupère, par ex 'C:Program FilesMon répertoireMonProgramme.Exe'
après tu peux faire du découpage de chaînes sur l'antislash
tu n'auras aucun mal à adapter en C++
-- * enlevez '.don't.spam' et '.invalid' de mon adresse eMail si vous voulez m'écrire * * Donne un poisson à un homme, il aura à manger pour un jour * Apprends-lui à pêcher, il aura à manger pour tous les jours de sa vie *
On Mon, 6 Sep 2004 20:38:50 +0200, Stan <Stan@stan.fr> wrote:
Bonjour,
je développe une appli en visual C++ ( visual studio .net ) qui exploite
des
fichiers en .jpg.
J'ai fait une association de fichiers pour ouvrir cette appli
automatiquement lorsque je double-clique un fichier jpg.
Mon problème est que pour fonctionner, mon appli fait appel à d'autres
fichiers qui se trouvent sur le meme répertoire que l'appli. Lorsque je
double clique un jpg, l'appli ne trouve pas les autres fichiers
nécessaires
à son fonctionnement puisque le répertoire courant est celui du jpg.
Comment
retrouver en C++ le répertoire sur lequel est stocké mon appli ? Merci
pour
votre aide.
pour l'inspiration :
une application reçoit, en général, automatiquement comme paramètre, son
chemin d'accès complet
par ex dans un code en Delphi, j'ai
CHEMINDEFAUT = ParamStr( 0) ;
dans CHEMINDEFAUT je recupère, par ex 'C:Program FilesMon
répertoireMonProgramme.Exe'
après tu peux faire du découpage de chaînes sur l'antislash
tu n'auras aucun mal à adapter en C++
--
* enlevez '.don't.spam' et '.invalid' de mon adresse eMail si vous voulez
m'écrire *
* Donne un poisson à un homme, il aura à manger pour un jour
* Apprends-lui à pêcher, il aura à manger pour tous les jours de sa vie *
je développe une appli en visual C++ ( visual studio .net ) qui exploite des fichiers en .jpg. J'ai fait une association de fichiers pour ouvrir cette appli automatiquement lorsque je double-clique un fichier jpg. Mon problème est que pour fonctionner, mon appli fait appel à d'autres fichiers qui se trouvent sur le meme répertoire que l'appli. Lorsque je double clique un jpg, l'appli ne trouve pas les autres fichiers nécessaires à son fonctionnement puisque le répertoire courant est celui du jpg. Comment retrouver en C++ le répertoire sur lequel est stocké mon appli ? Merci pour votre aide.
pour l'inspiration : une application reçoit, en général, automatiquement comme paramètre, son chemin d'accès complet par ex dans un code en Delphi, j'ai
CHEMINDEFAUT = ParamStr( 0) ; dans CHEMINDEFAUT je recupère, par ex 'C:Program FilesMon répertoireMonProgramme.Exe'
après tu peux faire du découpage de chaînes sur l'antislash
tu n'auras aucun mal à adapter en C++
-- * enlevez '.don't.spam' et '.invalid' de mon adresse eMail si vous voulez m'écrire * * Donne un poisson à un homme, il aura à manger pour un jour * Apprends-lui à pêcher, il aura à manger pour tous les jours de sa vie *
Arnaud Debaene
Stan wrote:
Bonjour,
<snip> Comment retrouver en C++ le répertoire sur lequel est
stocké mon appli ? Merci pour votre aide.
GetModuleFileName(NULL, ...)
Arnaud MVP - VC
Stan wrote:
Bonjour,
<snip>
Comment retrouver en C++ le répertoire sur lequel est
On Mon, 6 Sep 2004 21:10:21 +0200, Arnaud Debaene wrote:
Patrick D. wrote:
On Mon, 6 Sep 2004 20:38:50 +0200, Stan wrote:
pour l'inspiration : une application reçoit, en général, automatiquement comme paramètre, son chemin d'accès complet
<snip> Et dans les "cas particuliers" où ce n'est pas le cas ?
Arnaud
le cas général l'est à 99.99% il me semble qu'il avait 1 ou 2 langages ou L4G qui ne passaient pas ce paramètre 0. Le C passe ce param 0, comme tu l'a mis dans un autre post.
-- * enlevez '.don't.spam' et '.invalid' de mon adresse eMail si vous voulez m'écrire * * Donne un poisson à un homme, il aura à manger pour un jour * Apprends-lui à pêcher, il aura à manger pour tous les jours de sa vie *
On Mon, 6 Sep 2004 20:38:50 +0200, Stan <Stan@stan.fr> wrote:
pour l'inspiration :
une application reçoit, en général, automatiquement comme paramètre,
son chemin d'accès complet
<snip>
Et dans les "cas particuliers" où ce n'est pas le cas ?
Arnaud
le cas général l'est à 99.99%
il me semble qu'il avait 1 ou 2 langages ou L4G qui ne passaient pas ce
paramètre 0.
Le C passe ce param 0, comme tu l'a mis dans un autre post.
--
* enlevez '.don't.spam' et '.invalid' de mon adresse eMail si vous voulez
m'écrire *
* Donne un poisson à un homme, il aura à manger pour un jour
* Apprends-lui à pêcher, il aura à manger pour tous les jours de sa vie *
On Mon, 6 Sep 2004 21:10:21 +0200, Arnaud Debaene wrote:
Patrick D. wrote:
On Mon, 6 Sep 2004 20:38:50 +0200, Stan wrote:
pour l'inspiration : une application reçoit, en général, automatiquement comme paramètre, son chemin d'accès complet
<snip> Et dans les "cas particuliers" où ce n'est pas le cas ?
Arnaud
le cas général l'est à 99.99% il me semble qu'il avait 1 ou 2 langages ou L4G qui ne passaient pas ce paramètre 0. Le C passe ce param 0, comme tu l'a mis dans un autre post.
-- * enlevez '.don't.spam' et '.invalid' de mon adresse eMail si vous voulez m'écrire * * Donne un poisson à un homme, il aura à manger pour un jour * Apprends-lui à pêcher, il aura à manger pour tous les jours de sa vie *
Arnaud Debaene
Patrick D. wrote:
On Mon, 6 Sep 2004 21:10:21 +0200, Arnaud Debaene wrote:
Patrick D. wrote:
On Mon, 6 Sep 2004 20:38:50 +0200, Stan wrote:
pour l'inspiration : une application reçoit, en général, automatiquement comme paramètre, son chemin d'accès complet
<snip> Et dans les "cas particuliers" où ce n'est pas le cas ?
le cas général l'est à 99.99% il me semble qu'il avait 1 ou 2 langages ou L4G qui ne passaient pas ce paramètre 0.
Le problème surtout, c'est que rien ne garantit que ce paramètre soit le nom complèt (ave chemin) de l'exécutable. Ce qui est passé, c'est la chaîne exacte passée en paramètre à CreateProcess, donc c'est entièrement dépendant du processus père qui créé le nouveau processus. Raison pour laquelle on ne peut s'appuyer dessus (et raison pour laquelle c'est un b**** innommable de gérer cela sous Unix, où il n'y a pas d'équivalent à GetModuleFileName.)
Le C passe ce param 0, comme tu l'a mis dans un autre post.
On Mon, 6 Sep 2004 20:38:50 +0200, Stan <Stan@stan.fr> wrote:
pour l'inspiration :
une application reçoit, en général, automatiquement comme paramètre,
son chemin d'accès complet
<snip>
Et dans les "cas particuliers" où ce n'est pas le cas ?
le cas général l'est à 99.99%
il me semble qu'il avait 1 ou 2 langages ou L4G qui ne passaient pas
ce paramètre 0.
Le problème surtout, c'est que rien ne garantit que ce paramètre soit le nom
complèt (ave chemin) de l'exécutable. Ce qui est passé, c'est la chaîne
exacte passée en paramètre à CreateProcess, donc c'est entièrement dépendant
du processus père qui créé le nouveau processus. Raison pour laquelle on ne
peut s'appuyer dessus (et raison pour laquelle c'est un b**** innommable de
gérer cela sous Unix, où il n'y a pas d'équivalent à GetModuleFileName.)
Le C passe ce param 0, comme tu l'a mis dans un autre post.
On Mon, 6 Sep 2004 21:10:21 +0200, Arnaud Debaene wrote:
Patrick D. wrote:
On Mon, 6 Sep 2004 20:38:50 +0200, Stan wrote:
pour l'inspiration : une application reçoit, en général, automatiquement comme paramètre, son chemin d'accès complet
<snip> Et dans les "cas particuliers" où ce n'est pas le cas ?
le cas général l'est à 99.99% il me semble qu'il avait 1 ou 2 langages ou L4G qui ne passaient pas ce paramètre 0.
Le problème surtout, c'est que rien ne garantit que ce paramètre soit le nom complèt (ave chemin) de l'exécutable. Ce qui est passé, c'est la chaîne exacte passée en paramètre à CreateProcess, donc c'est entièrement dépendant du processus père qui créé le nouveau processus. Raison pour laquelle on ne peut s'appuyer dessus (et raison pour laquelle c'est un b**** innommable de gérer cela sous Unix, où il n'y a pas d'équivalent à GetModuleFileName.)
Le C passe ce param 0, comme tu l'a mis dans un autre post.
J'ai dis çà moi?
Arnaud
Patrick D.
On Tue, 7 Sep 2004 11:36:35 +0200, Arnaud Debaene wrote:
Le C passe ce param 0, comme tu l'a mis dans un autre post.
J'ai dis çà moi?
si on décortiquait le 'getmodule ....'
-- * enlevez '.don't.spam' et '.invalid' de mon adresse eMail si vous voulez m'écrire * * Donne un poisson à un homme, il aura à manger pour un jour * Apprends-lui à pêcher, il aura à manger pour tous les jours de sa vie *
Le C passe ce param 0, comme tu l'a mis dans un autre post.
J'ai dis çà moi?
si on décortiquait le 'getmodule ....'
--
* enlevez '.don't.spam' et '.invalid' de mon adresse eMail si vous voulez
m'écrire *
* Donne un poisson à un homme, il aura à manger pour un jour
* Apprends-lui à pêcher, il aura à manger pour tous les jours de sa vie *
On Tue, 7 Sep 2004 11:36:35 +0200, Arnaud Debaene wrote:
Le C passe ce param 0, comme tu l'a mis dans un autre post.
J'ai dis çà moi?
si on décortiquait le 'getmodule ....'
-- * enlevez '.don't.spam' et '.invalid' de mon adresse eMail si vous voulez m'écrire * * Donne un poisson à un homme, il aura à manger pour un jour * Apprends-lui à pêcher, il aura à manger pour tous les jours de sa vie *
Arnaud Debaene
Patrick D. wrote:
On Tue, 7 Sep 2004 11:36:35 +0200, Arnaud Debaene wrote:
Le C passe ce param 0, comme tu l'a mis dans un autre post. J'ai dis çà moi?
si on décortiquait le 'getmodule ....'
On trouverait quoi si on décorticait GetModuleFileName? Ca n'a rien à voir avec les paramètres passés au main!
On Tue, 7 Sep 2004 11:36:35 +0200, Arnaud Debaene wrote:
Le C passe ce param 0, comme tu l'a mis dans un autre post. J'ai dis çà moi?
si on décortiquait le 'getmodule ....'
On trouverait quoi si on décorticait GetModuleFileName? Ca n'a rien à voir avec les paramètres passés au main!
Arnaud
Bertrand Lenoir-Welter
> Le problème surtout, c'est que rien ne garantit que ce paramètre soit le nom complèt (ave chemin) de l'exécutable. Ce qui est passé, c'est la chaîne exacte passée en paramètre à CreateProcess, donc c'est entièrement dépendant du processus père qui créé le nouveau processus.
Là, vous m'étonnez. A mon sens, au point d'entrée d'un programme EXE, l'argument 0 est toujours le nom de l'exécutable avec son chemin d'accès complet, quel que soit le processus lanceur. En tout cas, c'est comme ça que j'ai toujours fait et j'ai jamais eu un problème signalé.
#include <dir.h>
int main(int ArgNb, char *ArgStr[]) { fnsplit(ArgStr[0],DriveStr,DirStr,NameStr,ExtStr); // fait le reste }
Bon, je ne sors jamais de Windows, désolé. Mais il me semble que le post original parlait de Visual C++, ce qui laisse présumer que c'est aussi le cas.
> Le problème surtout, c'est que rien ne garantit que ce paramètre soit le nom
complèt (ave chemin) de l'exécutable. Ce qui est passé, c'est la chaîne
exacte passée en paramètre à CreateProcess, donc c'est entièrement dépendant
du processus père qui créé le nouveau processus.
Là, vous m'étonnez. A mon sens, au point d'entrée d'un programme EXE,
l'argument 0 est toujours le nom de l'exécutable avec son chemin d'accès
complet, quel que soit le processus lanceur. En tout cas, c'est comme ça
que j'ai toujours fait et j'ai jamais eu un problème signalé.
#include <dir.h>
int main(int ArgNb, char *ArgStr[]) {
fnsplit(ArgStr[0],DriveStr,DirStr,NameStr,ExtStr); // fait le reste
}
Bon, je ne sors jamais de Windows, désolé. Mais il me semble que le post
original parlait de Visual C++, ce qui laisse présumer que c'est aussi
le cas.
> Le problème surtout, c'est que rien ne garantit que ce paramètre soit le nom complèt (ave chemin) de l'exécutable. Ce qui est passé, c'est la chaîne exacte passée en paramètre à CreateProcess, donc c'est entièrement dépendant du processus père qui créé le nouveau processus.
Là, vous m'étonnez. A mon sens, au point d'entrée d'un programme EXE, l'argument 0 est toujours le nom de l'exécutable avec son chemin d'accès complet, quel que soit le processus lanceur. En tout cas, c'est comme ça que j'ai toujours fait et j'ai jamais eu un problème signalé.
#include <dir.h>
int main(int ArgNb, char *ArgStr[]) { fnsplit(ArgStr[0],DriveStr,DirStr,NameStr,ExtStr); // fait le reste }
Bon, je ne sors jamais de Windows, désolé. Mais il me semble que le post original parlait de Visual C++, ce qui laisse présumer que c'est aussi le cas.
castorix
"Patrick D." <patrickr.dubois.don' wrote in message news:...
On Tue, 7 Sep 2004 11:36:35 +0200, Arnaud Debaene wrote:
>> Le C passe ce param 0, comme tu l'a mis dans un autre post. > J'ai dis çà moi? >
si on décortiquait le 'getmodule ....'
GetModuleFileName() ne fait juste que lire le PEB (NtCurrentPeb()), un peu comme lorsqu'on lit la variable "environ" sous Unix.
"Patrick D." <patrickr.dubois.don't.spam@free.fr> wrote in message news:<opsdyvbtj0ul3rue@news.free.fr>...