;SOUS PB 6.40
winpath$="c:\windows\"
filename$="filesys.txt"
fullpath$=winpath$ + filename$
debug fullpath$
;Résultat affiché : "c:\windows\"
filename$ n'est pas affiché
SOUS PB 6.10
j'ai utilisé le même programme sous pb 6.10, ça a marché
promadoc a écrit : lun. 15/juin/2026 22:15
S'agit il de la version x86 32bits windows? C'est celle là qui déconne à mon niveau (je vais revoir les variables)
Tu n'as pas précisé dans ton message d'origine qu'il s'agissait de la version 32bits...
Cela dit, ça fonctionne très bien ici
Win 11
PB 6.40 32bits
Bureau : Win11 64bits
Maison : Macbook Pro M4 16" SSD 512 Go / Ram 24 Go - iPad Air 128 Go (pour madame) - iPhone 17 Pro Max 256 Go
promadoc a écrit : lun. 15/juin/2026 17:52
Le problème existe toujours, sinon je n'aurais jamais le remplacer par la version 6.10. Je suis persuadé que vous n'avez pas utilisé le bon exemple.
Si si
Ton exemple.
Copié-collé
En mettant en commentaire les 4 dernières lignes, bien évidemment.
Bureau : Win11 64bits
Maison : Macbook Pro M4 16" SSD 512 Go / Ram 24 Go - iPad Air 128 Go (pour madame) - iPhone 17 Pro Max 256 Go
Alors où se trouve l'explication? Y a t il plusieurs versions différentes Pb 6.40 (1) et Pb 6.40 (b)? C'est la seule explication valable puisque ça marche chez quelqu'un et ça ne marche pas chez d'autres?? N'est ce pas un mystère? Je viens de tester avec la version Pb 6.30 résultat : ça fonctionne normalement, j'ai refait le test avec Pb 6.40 et hop! le même faux résultat se reproduit..
Incroyable mais vrai ! Je viens de désinstaller pb 6.30 je retélécharge Pb 6.40 x86. J'ai retesté en utilisant le même exemple cité et ça marche. Je ne comprends pas ce qui s'est passé (pas convaincu) mais la question reste posée: peut être que j'ai fait une erreur d'orthographe? Bref, l'essentiel ça fonctionne et je suis content que ça marche. Merci à vous tous de votre assistance et bonne continuation.
Finalement, j'avais raison, voici la preuve que debug ne fonctionne pas quand on utilise GetSystemFolder() (Chemin de window), j'ai oublié de le signaler c'est pour cette raison que vos tests fonctionnait bien, voici le code complet.
;------------------------------------------------------------------------------------------------------
Procedure.s GetSystemFolder (folder)
*itemid.ITEMIDLIST = #Null
If SHGetSpecialFolderLocation_ (0, folder, @*itemid) = #NOERROR
location$ = Space (#MAX_PATH)
If SHGetPathFromIDList_ (*itemid, @location$)
ProcedureReturn location$
EndIf
EndIf
EndProcedure
;------------------------------------------------------------------------------------------------------
Procedure Testdemo()
filename$="filesys.txt"
;Récupérer le chemin de windows
winpath$=GetSystemFolder (#CSIDL_WINDOWS)
;Chemin du fichier filesys.txt
fullpath$=winpath$ + "\" + filename$
;affichage du chemin avec debug
Debug "fullpath$="+fullpath$
;affichage du chemin avec MessageRequester
MessageRequester("FullPath$=",fullpath$)
;Par contre si on n'utilise pas getsystemfolder(), le résultat est tout autre
winpath$="c:\windows"
fullpath$=winpath$ + "\" + filename$
;affichage du chemin avec debug
Debug "fullpath$="+fullpath$
;avec MessageRequester...
MessageRequester("FullPath$=",fullpath$)
EndProcedure
Testdemo()
Je vous invite à tester ce code tel qu'il est, merci
;Récupérer le chemin de windows
winpath$=GetSystemFolder (#CSIDL_WINDOWS)
;Récupérer le lecteur disque de windows
windrive$=UCase(Left(winpath$,2))
;Afficher le chemin complet du fichier
fullpath$=windrive$ + "\windows\" + filesys$
Debug "fullpath$="+fullpath$
;------------------------------------------------------------------------------------------------------
Procedure.s GetSystemFolder (folder)
*itemid.ITEMIDLIST = #Null
If SHGetSpecialFolderLocation_ (0, folder, @*itemid) = #NOERROR
location$ = Space (#MAX_PATH)
If SHGetPathFromIDList_ (*itemid, @location$)
ProcedureReturn RTrim(location$)
EndIf
EndIf
EndProcedure
;------------------------------------------------------------------------------------------------------
Procedure Testdemo()
filename$="filesys.txt"
;Récupérer le chemin de windows
winpath$=GetSystemFolder (#CSIDL_WINDOWS)
;Chemin du fichier filesys.txt
fullpath$=winpath$ + "\" + filename$
;affichage du chemin avec debug
Debug "fullpath$="+fullpath$
;affichage du chemin avec MessageRequester
MessageRequester("FullPath$=",fullpath$)
;Par contre si on n'utilise pas getsystemfolder(), le résultat est tout autre
winpath$="c:\windows"
fullpath$=winpath$ + "\" + filename$
;affichage du chemin avec debug
Debug "fullpath$="+fullpath$
;avec MessageRequester...
MessageRequester("FullPath$=",fullpath$)
EndProcedure
Testdemo()
Les chemins Windows sont limités à 260 caractères, et comme la valeur de retour est remplie d'espaces non significatifs à la fin, tu atteins donc les 260 caractères. J'ai juste ajouté le RTrim() sur la valeur de retour de ta procédure GetSystemFolder.
ça n'explique pas pourquoi le Debug n'affiche pas quand même le chemin complet avec le "filesys.txt"
Procedure.s GetSystemFolder(folder)
*itemid.ITEMIDLIST = #Null
If SHGetSpecialFolderLocation_ (0, folder, @*itemid) = #NOERROR
location$ = Space(#MAX_PATH)
If SHGetPathFromIDList_ (*itemid, @location$)
ProcedureReturn PeekS(@location$) ; lecture de la chaîne en mémoire ou ; RTrim(PeekS(@location$)) aussi
EndIf
EndIf
EndProcedure
winpath$ = GetSystemFolder (#CSIDL_WINDOWS)
If Right(winpath$, 1) <> "\"
winpath$ + "\"
EndIf
filename$ = "filesys.txt"
Debug winpath$ + filename$
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.