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à.
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
Salut
Le plus simple est surement d'accéder à la variable d'environnement TEMP:
@+ Claudius
Code : Sélectionner tout - Visualiser dans une fenêtre à part 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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+.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :le répertoire temp de l'utilisateur courant
J'obtiens ce message, alors que la msdn dit que cette fonction est dans cette DLL :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 c++ : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Donc, il faut que je trouve autre chose ...
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ème
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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\'
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager