| Chemin de l'exécutable | |
|
|
Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Chemin de l'exécutable Sam 23 Mai 2020 - 10:09 | |
| J'ai un exécutable qui est dans un répertoire particulier avec quelques fichiers annexes nécessaires à son fonctionnement. Ce répertoire est mobile et peut se trouver n'importe où, sur une clé USB par exemple, et évidemment l'exécutable peut être lancé depuis n'importe où. Cet exécutable a besoin d'accéder aux fichiers annexes, donc de connaître leur chemin d'accès (qui est ici le même que celui de l'exécutable lui-même).
Est-il possible, depuis le programme lui-même une fois lancé, de connaître son chemin d'accès, pour pouvoir accéder aux fichiers annexes ? DIR_CURRENT$ donne le chemin depuis lequel il a été lancé... ce qui n'est pas pareil. | |
|
| |
silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Chemin de l'exécutable Sam 23 Mai 2020 - 10:34 | |
| Tu peux essayer d'utiliser les chemins relatifs Sinon, je fais comme ça dans mon éditeur: - Code:
-
dim DIR_APPLICATION$,DISK_APPLICATION$
DIR_APPLICATION$=file_extract_path$(param_value$(0)) DISK_APPLICATION$=file_extract_disk$(DIR_APPLICATION$)
print DIR_APPLICATION$ print DISK_APPLICATION$ mais ça ne fonctionne plus avec la version 0929i9, c'est une des raisons qui m'a poussé à repasser à la version 0929i8. | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Chemin de l'exécutable Sam 23 Mai 2020 - 10:44 | |
| Merci silverman, mais si ça ne fonctionne plus...
Quant aux chemins relatifs ??? En fait je veux pouvoir mettre mon répertoire complet sur n'importe quel support, lancer le programme depuis n'importe où, et que l'exécutable sache où il est pour retrouver les fichiers qui sont avec lui.
PS Eh dis-donc silverman, ça a l'air de marcher la combine file_extract_path(param_value$(0)) pourtant je suis bien sous 29i9 ! J'adopte, merci ! | |
|
| |
silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Chemin de l'exécutable Sam 23 Mai 2020 - 11:48 | |
| Ok j'ai compris. La combine sembe marcher pour un programme .EXE, mais pas pour un TEMP. Les chemins relatifs c'est par exemple si ton programme est dans le dossier "c:\mon_pc\toto" et qu'il existe un sous dossier "aide" qui contient le fichier "help.txt", tu peux y accéder comme ça:
chemin complet : file_load N,"c:\mon_pc\toto\aide\help.txt"
chemin relatif : file_load N,".\aide\help.txt"
Le point remplace le chemin courant. Si tu n'utilise pas d'objet qui modifie 'dir_currents', c'est idéal. | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Chemin de l'exécutable Sam 23 Mai 2020 - 12:07 | |
| Pour l'usage que j'en fais ça me convient très bien. Merci silverman, et bonne journée à toi ! Allez, aux autres aussi, au diable l'avarice ! | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Chemin de l'exécutable Sam 23 Mai 2020 - 16:10 | |
| Concernant mon problème: un exécutable situé dans un répertoire particulier contenant des données. On peut lancer l'exécutable, mais le programme a besoin de connaître le chemin des données (situées avec l'exécutable), ce qui n'est pas évident, si par exemple le tout est sur un support externe. La solution de silverman marche parfaitement et donne ce chemin Répertoire de l'exécutable en cours: FILE_EXTRACT_PATH$(PARAM_VALUE$(0)) Par contre, pendant la mise au point, si on exécute le programme depuis l'éditeur Panoramic, le chemin du code exécuté est C:\Users\[NOM]\AppData\Local\Temp\, [NOM] étant variable (nom du PC), ce qui est gênant pour la mise au point sur plusieurs machines. Le problème est de trouver le nom du PC, alors... Ici, le répertoire de mise au point contenant les données est C:\SUDOPDF\ : - Code:
-
DIM rep$,rpa$ FILE_OPEN_WRITE 1,"Usname.bat" FILE_WRITELN 1,"@echo off" FILE_WRITELN 1,"ECHO C:\Users\%USERNAME%\AppData\Local\Temp\ | clip" FILE_CLOSE 1 EXECUTE_WAIT "Usname.bat" rpa$ = TRIM$(CLIPBOARD_STRING_PASTE$): ' répertoire d'exécution sous éditeur FILE_DELETE "Usname.bat" rep$ = FILE_EXTRACT_PATH$(PARAM_VALUE$(0)): ' répertoire de travail (actuel) IF rep$ = rpa$: ' Si exécution depuis l'éditeur Panoramic rep$ = "C:\SUDOPDF": ' On force le chemin du répertoire des données END_IF Pour éviter d'avoir à modifier le source suivant qu'on est en essais ou opérationnel. A toutes fins utiles, chez moi ça marche. Et encore merci silverman ! | |
|
| |
silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Chemin de l'exécutable Sam 23 Mai 2020 - 16:43 | |
| Avant de repasser à la version 0929i8, j'avais testé cette solution; A placer au tout début du source: - Code:
-
dim root$ root$=FILE_EXTRACT_PATH$(PARAM_VALUE$(0)) if root$<>dir_current$+chr$(92) root$=dir_current$+chr$(92) ' root$="ma_root" :' ou codage en dur print "exécution depuis l'éditeur" else print ".exe" end_if print "root$= ",root$ Pas testé à fond, trop de pb annexes avec la version 0929i9 EDIT: Tu peux aussi obtenir le répertoire TEMP via dll de cette manière: - Code:
-
print DIR_TEMP$()
end fnc DIR_TEMP$() dim_local DIR_TEMP_DOLLAR_c$,DIR_TEMP_DOLLAR_dword% peek_reverse DIR_TEMP_DOLLAR_c$=string$(260," ") ' appel de la dll DLL_ON "kernel32.dll" ' appel de la fonction DIR_TEMP_DOLLAR_dword% = DLL_CALL2("GetTempPathA",260,peek32(adr(DIR_TEMP_DOLLAR_c$))) :' obtient le chemin; 'DIR_TEMP_DOLLAR_dword%' = nombre de caractères inscrit dans la structure n°1 (via lpBuffer%) par la fonction dll "GetTempPath" DLL_OFF result trim$(DIR_TEMP_DOLLAR_c$) end_fnc | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Chemin de l'exécutable Sam 23 Mai 2020 - 20:05 | |
| Effectivement, ça c'est intéressant avec la kernel32, je note et j'archive. | |
|
| |
Contenu sponsorisé
| Sujet: Re: Chemin de l'exécutable | |
| |
|
| |
| Chemin de l'exécutable | |
|