Comment récupérer le répertoire temp de l'utilisateur courant ?
>> C:\Documents and Settings\Moi\Local Settings\Temp\
J'ai regardé dans la faq, je n'ai rien vu sur celui-là.
Version imprimable
Comment récupérer le répertoire temp de l'utilisateur courant ?
>> C:\Documents and Settings\Moi\Local Settings\Temp\
J'ai regardé dans la faq, je n'ai rien vu sur celui-là.
Bonjour,
je n'ai pas ce qu'il faut sous la main mais on sais connaître le nom de la session ouverte.
De la ton chemin vers le dossier que tu cherches a la réponse à la variable qui te manquait.
Si je me trompe c'est dû à l'heure de mise en réveil des neurones :calim2:
Salut
Le plus simple est surement d'accéder à la variable d'environnement TEMP:
@+ ClaudiusCode:TmpFolder := GetEnvironmentVariable('TEMP');
Bonjour,
La fonction Windows.GetTempPath(nBufferLength: DWORD; lpBuffer: PChar): DWORD; ne répond pas à ton besoin ?
Sous D7 ou D2006, elle renvoie le chemin correct si ce n'est qu'il en format court (8.3).
--
Philippe.
J'allais t'indiquer de regarder dans le registre
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
mais Microsoft (je suppose) y a coller le texte suivant :
!Do not use this registry key
Use the SHGetFolderPath or SHGetKnownFolderPath function instead
:)
Bonjour,
Variante :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 function GetTempDossier: string; // cette fonction renvoie : le dossier temporaire de Windows en fonction des critères suivants: // 1. le chemin spécifié par la variable d'environement TMP // 2. le chemin spécifié par la variable d'environement TEMP si TMP non défini // 3. le dossier courant si aucune des deux variables TMP et TEMP ne sont définies var Dossier: array[0..MAX_PATH] of Char; begin result:=''; if GetTempPath(SizeOf(Dossier), Dossier)<>0 then Result := GetLongFilename(StrPas(Dossier)); end; procedure TForm1.Button1Click(Sender: TObject); begin showmessage(GetTempDossier); end;
A+. :DCode:
1
2
3
4
5
6 var Temp : array[0..255] of Char; DossTemp : string; begin // Dossier Temp GetEnvironmentVariable('TEMP', Temp, SizeOf(Temp)); // touver le nom-court du dossier Temp DossTemp:=GetLongFilename(Temp); ... end;
Mouais, alors c'est autre chose qu'un répertoire temporaire que tu veux :roll:
C'est un répertoire de stockage de données utilisateurs...
Regardes cette fonction GetUserProfileDirectory
et la base de registre :
- HKCU\Environment
- HKCU\Volatile Environment
--
Philippe.
La msdn dit que SHGetFolderPath est dépréciée et qu'il faut utiliser SHGetKnownFolderPath. Le problème c'est que je ne sais pas comment définir FOLDERID_Profile.
Même si je n'ai pas vu de variable d'envirronement qui correspond pile à ce que je cherche, je peux au moins faire ça (mais que pour XP):
;)Code:
1
2
3 GetEnvironmentVariable('USERPROFILE', Temp, nTaille); ShowMessage(String(Temp) + '\Local Settings\Temp\');
Oui. C'est pour ça que dans mon premier message, je demande ::aie:Citation:
le répertoire temp de l'utilisateur courant
J'obtiens ce message, alors que la msdn dit que cette fonction est dans cette DLL ::koi:Citation:
Le point d'entrée de procédure GetUserProfileDirectory est introuvable dans la bibliothèque de liaisons dynamique Userenv.dll.
SHGetKnownFolderPath function utilise KNOWNFOLDERID , et FOLDERID_Profile c'est une constante
Dans mon C++Builder2007 (fichier Knownfolders.h) ça donne
Code:
1
2
3
4
5
6
7 #define DEFINE_KNOWN_FOLDER(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ EXTERN_C const GUID DECLSPEC_SELECTANY name \ = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } // {5E6C858F-0E22-4760-9AFE-EA3317B67173} DEFINE_KNOWN_FOLDER(FOLDERID_Profile, 0x5E6C858F, 0x0E22, 0x4760, 0x9A, 0xFE, 0xEA, 0x33, 0x17, 0xB6, 0x71, 0x73);
ce qui donne en Delphi
Code:
1
2
3 // {5E6C858F-0E22-4760-9AFE-EA3317B67173} FOLDERID_Profile: TGUID = '{5E6C858F-0E22-4760-9AFE-EA3317B67173}'; {$EXTERNALSYM FOLDERID_Profile}
Ce n'est pas la 1ère fois que je lis que "Windows.GetTempPath" ne renvoie pas le bon chemin !
Moi, j'ai eu des soucis avec GetSystemDirectory qui n'a jamais vraiment donné quelques choses de correct !
Personnellement, sous XP, je n'ai jamais eu de problème, j'ai toujours eu "...\Local Settings\Temp\"
Tu devrais tester sur différentes machines !
Je viens de re-jeter un oeil plus attentif sur la msdn. La fonction SHGetKnownFolderPath n'existe qu'à partir de vista. :bug:
Donc, il faut que je trouve autre chose ... :calim2:
Bin oui mais, même s'il n'y a que quelques postes qui posent problème, c'est des postes de trop. Il me faut une solution qui fonctionne sur tout les postes.
Bonsoir,
Moi j'utilise la fonction
A toi de prendre le bon paramètre nFolder (ici CSIDL_DESKTOP), que se soit sous XP, seven 32 ou 64 je n'ai jamais eu de problèmeCode:
1
2
3
4
5 var Path : array[0..MAX_PATH] of Char; begin //******* on récupère le chemin du bureau dans path if ShGetSpecialFolderPath(0, path, CSIDL_DESKTOP, False) then
Bye
Pas mal ! ;)
En attendant mieux, je crois que je vais rester sur ça pour XP :
Code:
1
2
3
4
5
6
7
8
9
10
11 function RepertoireSysteme(const nFolder: Integer): String; var SpecialPath: Array[0 .. MAX_PATH] of char; begin Result := ''; if ShGetSpecialFolderPath(0, SpecialPath, nFolder, False) then Result := String(SpecialPath); end; ... RepertoireSysteme(CSIDL_PROFILE) + '\Local Settings\Temp\'