Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1214 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Pb avec GetTempPath() et profil utilisateur.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pb avec GetTempPath() et profil utilisateur.

n°1228677
HERIBERT
Posté le 22-10-2005 à 12:15:02  profilanswer
 

Encore un pb de documentation des API.  
 
Je veux connaître le répertoire temporaire du profil actif (user couant). J'ai trouvé GetTempPath().  
 
Chez M% (laboratoire M%), tout en anglais et souyvent implémenté en BASI :(  
 
Ce code ne retourne rien :   GetTempPath(Entier_Long, PChar(Chn_Temp)); où :
   Entier_Long : longint;
   Chn : string;
 
Je devrais récupérer le répertoire temporaire ds Chn, non :heink: ?  
 
 :hello:

mood
Publicité
Posté le 22-10-2005 à 12:15:02  profilanswer
 

n°1228883
antp
Super Administrateur
Champion des excuses bidons
Posté le 23-10-2005 à 01:10:17  profilanswer
 

Tu fais un setlength de ta chaîne avant ? Entier_long contient quoi ? Je ne suis pas sûr que ce soit très prudent comme système. Un PChar initialisé à la main avant l'appel et libéré après me paraît plus "normal".

Message cité 1 fois
Message édité par antp le 23-10-2005 à 01:11:15

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1228976
HERIBERT
Posté le 23-10-2005 à 12:19:48  profilanswer
 

antp a écrit :

Tu fais un setlength de ta chaîne avant ? Entier_long contient quoi ? Je ne suis pas sûr que ce soit très prudent comme système. Un PChar initialisé à la main avant l'appel et libéré après me paraît plus "normal".


Bonjour, Antp.  
 
Non, pas de Setlength : Entier_Long initialisé à ... je ne sais plus quelle valeur précise :D Donc statique. J'ai dû me débrouiller autrement  - ds l'urgence, et pas très adroitement :sarcastic: Je vais voir ça.  
 
Ce qu'il me faudrait, c'est un truc comme le Richar Simon (Ressources d'Experts) et bien à jour pour XP et 2k. . Pour la programmation des API, c'est le top. Le code donné en exemple est en C, pas en Basic omme sur le site du laboratoire microsoft.  
Mais je ne trouvais pas exactement ce que je cherchais : récupérer le path du répertoire \Documents and Settings\\PROFIL_UTILISATEUR\\Local Settings\\Temp . A défaut, le nom du profil actif. Pas évident :heink:

Message cité 2 fois
Message édité par HERIBERT le 23-10-2005 à 12:20:36
n°1228977
HERIBERT
Posté le 23-10-2005 à 12:23:57  profilanswer
 

HERIBERT a écrit :

Bonjour, Antp.  
 
Non, pas de Setlength : Entier_Long initialisé à ... je ne sais plus quelle valeur précise :D Donc statique. J'ai dû me débrouiller autrement  - ds l'urgence, et pas très adroitement :sarcastic: Je vais voir ça.  
 
Ce qu'il me faudrait, c'est un truc comme le Richar Simon (Ressources d'Experts) et bien à jour pour XP et 2k. . Pour la programmation des API, c'est le top. Le code donné en exemple est en C, pas en Basic omme sur le site du laboratoire microsoft.  
Mais je ne trouvais pas exactement ce que je cherchais : récupérer le path du répertoire \Documents and Settings\\PROFIL_UTILISATEUR\\Local Settings\\Temp . A défaut, le nom du profil actif. Pas évident :heink:


Voici le monument :love: : http://www.ifrance.com/a445bj/apisimon.jpg . Désolé pr le format JPG : pas eu le temps de le translater :)

n°1228990
antp
Super Administrateur
Champion des excuses bidons
Posté le 23-10-2005 à 12:53:04  profilanswer
 

HERIBERT a écrit :


Non, pas de Setlength : Entier_Long initialisé à ... je ne sais plus quelle valeur précise :D Donc statique. J'ai dû me débrouiller autrement  - ds l'urgence, et pas très adroitement :sarcastic: Je vais voir ça.


 
Donc tu passes à la fonction un pointeur vers une zone mémoire que tu n'as pas initialisée à la longueur que tu lui donnes en param ? :p
 
 
Deux solutions :


procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
  p: PChar;
begin
  p := StrAlloc(MAX_PATH);
  try
    GetTempPath(MAX_PATH, p);
    s := p;
  finally
    StrDispose(p);
  end;
  ShowMessage(s);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  s: string;
  L: Integer;
begin
  SetLength(s, MAX_PATH);
  L := GetTempPath(MAX_PATH, PChar(s));
  setLength(s, L);
  ShowMessage(s);
end;


 
Dans les deux cas ça m'affiche "s:\windows", qui est bien mon dossier temp.

Message cité 1 fois
Message édité par antp le 23-10-2005 à 12:53:20

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1229050
HERIBERT
Posté le 23-10-2005 à 16:28:46  profilanswer
 

antp a écrit :

Donc tu passes à la fonction un pointeur vers une zone mémoire que tu n'as pas initialisée à la longueur que tu lui donnes en param ? :p
 
 
Deux solutions :


procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
  p: PChar;
begin
  p := StrAlloc(MAX_PATH);
  try
    GetTempPath(MAX_PATH, p);
    s := p;
  finally
    StrDispose(p);
  end;
  ShowMessage(s);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  s: string;
  L: Integer;
begin
  SetLength(s, MAX_PATH);
  L := GetTempPath(MAX_PATH, PChar(s));
  setLength(s, L);
  ShowMessage(s);
end;


 
Dans les deux cas ça m'affiche "s:\windows", qui est bien mon dossier temp.


Oui :) Ca fonctionne. Mais pas avec les noms longs.

n°1229059
antp
Super Administrateur
Champion des excuses bidons
Posté le 23-10-2005 à 16:44:46  profilanswer
 

Comment ça pas avec les noms longs ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1229156
HERIBERT
Posté le 23-10-2005 à 19:35:35  profilanswer
 

antp a écrit :

Comment ça pas avec les noms longs ?


L'affichage tronque les noms de chemin, comme sous DOS : c:\Documen~\... . C'est seulement l'affichage, ou la fonction :??: ? J'aurais dû vérifier ds le fenêtre de débogage, au lieu de conclure trop vite en jugeant seulement sur l'affichage ;)
Je vais vérifier.

Message cité 1 fois
Message édité par HERIBERT le 23-10-2005 à 19:36:19
n°1229162
HERIBERT
Posté le 23-10-2005 à 19:54:34  profilanswer
 

HERIBERT a écrit :

L'affichage tronque les noms de chemin, comme sous DOS : c:\Documen~\... . C'est seulement l'affichage, ou la fonction :??: ? J'aurais dû vérifier ds le fenêtre de débogage, au lieu de conclure trop vite en jugeant seulement sur l'affichage ;)
Je vais vérifier.


Voici exactement ce que ça donne, y compris en "mode trace" :  
http://www.ifrance.com/a445bj/extraint.png

n°1229175
antp
Super Administrateur
Champion des excuses bidons
Posté le 23-10-2005 à 20:35:29  profilanswer
 

Ça ne gêne pas à l'utilisation, c'est la version courte (8.3)
C'est juste un peu moche pour l'afficher à l'utilisateur (enfin, il n'a pas à voir ce genre de chemin de toute façon).
Tu peux tenter un GetFullFileName ou ExpandFileName, ça donnera peut-être le chemin en version longue


Message édité par antp le 23-10-2005 à 20:35:59

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Pb avec GetTempPath() et profil utilisateur.

 

Sujets relatifs
recuperer le nom d'utilisateurModifier variable environnement utilisateur ?
[PHP] forcer authentification HTTP sans demander à l'utilisateurenvoyer un message a un utilisateur
[RESOLU] PB script de creation d'utilisateurChanger l'affichage d'une page lorsqu'un utilisateur se loggue
Module de Classe et Type defini par l'utilisateur[ActiveX] obtenir le Temp de l'utilisateur ?
Modifier profil Terminal Server sous Active Directory avec OpenldapAccéder aux dossiers de l'utilisateur en cours
Plus de sujets relatifs à : Pb avec GetTempPath() et profil utilisateur.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR