IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

GetShortPathName et noms de fichier accentués [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 121
    Points : 80
    Points
    80
    Par défaut GetShortPathName et noms de fichier accentués
    Bonjour,

    Il semble que GetShortPathName ne fonctionne pas avec des fichiers accentués (ça me renvoie une chaine vide). Quelqu'un a-t-il une solution ?

    Merci,
    Vincent

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 667
    Points : 5 235
    Points
    5 235
    Par défaut
    Peut-être comme ceci (avec Ret déclaré en WideString);
    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try
       SetFileApisToOEM;
       GetShortPathNameW(PWideChar(Filename), PWideChar(Ret), MAX_PATH);
    finally   
       SetFileApisToANSI;
    end;

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 121
    Points : 80
    Points
    80
    Par défaut
    Bonsoir,

    Merci, mais ça ne semble pas fonctionner, ça retourne toujours une chaîne vide même si ce n'est pas accentué.
    Merci en tout cas pour l'idée, je vais creuser,


    Vincent

    EDIT : Je suis sous Lazarus et non Delphi...

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 857
    Points : 11 291
    Points
    11 291
    Billets dans le blog
    6
    Par défaut
    Alors que dirais-tu de déplacer ta discussion du forum Delphi vers le forum Lazarus ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 121
    Points : 80
    Points
    80
    Par défaut
    Mince, désolé, je n'avais pas vu qu'il y avait un forum spécifique pour Lazarus
    Toutes mes excuses. Est ce qu'un modérateur peut supprimer ou déplacer ce post ?

    Vincent

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 121
    Points : 80
    Points
    80
    Par défaut
    Merci pour le déplacement, pour préciser mon problème, je suis sous Windows et j'ai codé avec Lazarus un lanceur d'application (pour EduPython pour ceux qui connaissent).

    J’appelle mon exécutable (PyScripteur) ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var
      prog : String;
    begin
      if ParamCount > 0
      then prog := ' "'+ParamStr(1)+'"'
      else prog := '';
      [...]
      ShellExecute(0,'open',PChar('PyScripter.exe'),PChar('--python34 '+prog),'',1)
    Tout marche bien, si j'ouvre mon lanceur avec un fichier qui ne contient pas d'accent, mais s'il y a un accent, ça ne fonctionne plus. Je pensais que GetShortPathName pourrait régler le problème, mais ce dernier renvoie une chaine vide sur les caractères accentués....

    Merci de votre aide,
    Vincent

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Salut,

    peut-être "protéger" tes accents (je suppose dans "prog") par QuotedStr ?
    Genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var
      prog : QuotedStr;
    non testé, juste une idée comme ça...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Membre éclairé

    Homme Profil pro
    Rédacteur technique (retraité)
    Inscrit en
    Octobre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique (retraité)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 168
    Points : 807
    Points
    807
    Par défaut
    Bonjour

    Avec Lazarus, les chaînes sont encodées par défaut en UTF8, alors que l'API Windows nécessite un encodage ANSI.
    C'est le cas de ta variable prog qui doit être convertie avant d'être transmise à ShellExecute.
    Utilise pour cela la fonction Utf8ToWinCP de l'unité LazUtf8 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Uses LazUtf8;
    //...
    ShellExecute(0,'open',PChar('PyScripter.exe'),PChar('--python34 '+Utf8ToWinCP(prog)),'',1);

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 121
    Points : 80
    Points
    80
    Par défaut
    Super, merci ! La proposition de DomDA91 fonctionne à merveille, je ne connaissais pas cette fonction, ça fait un bout de temps que je me casse les dents sur le problème !
    Le bonheur, c'est simple comme un coup de Forum.

    Merci encore,
    Bonne journée,

    Vincent

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Encodage] Noms de fichiers accentués dans une archive Zip
    Par micetf dans le forum Langage
    Réponses: 2
    Dernier message: 03/05/2010, 20h50
  2. Réponses: 0
    Dernier message: 05/06/2009, 10h34
  3. Nom de fichiers accentués
    Par isildur37 dans le forum C++
    Réponses: 2
    Dernier message: 15/05/2009, 11h07
  4. zipfile nom de fichier accentués
    Par jihemd dans le forum Général Python
    Réponses: 2
    Dernier message: 22/12/2006, 00h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo