Pb avec GetTempPath() et profil utilisateur.

Pb avec GetTempPath() et profil utilisateur. - Delphi/Pascal - Programmation

Marsh Posté le 22-10-2005 à 12:15:02    

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:

Reply

Marsh Posté le 22-10-2005 à 12:15:02   

Reply

Marsh Posté le 23-10-2005 à 01:10:17    

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
Reply

Marsh Posté le 23-10-2005 à 12:19:48    

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
Reply

Marsh Posté le 23-10-2005 à 12:23:57    

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 :)

Reply

Marsh Posté le 23-10-2005 à 12:53:04    

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
Reply

Marsh Posté le 23-10-2005 à 16:28:46    

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.

Reply

Marsh Posté le 23-10-2005 à 16:44:46    

Comment ça pas avec les noms longs ?


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

Marsh Posté le 23-10-2005 à 19:35:35    

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
Reply

Marsh Posté le 23-10-2005 à 19:54:34    

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

Reply

Marsh Posté le 23-10-2005 à 20:35:29    

Ç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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed