1. #1
    Membre du Club
    Profil pro
    Inscrit en
    avril 2010
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2010
    Messages : 93
    Points : 67
    Points
    67

    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
    Membre expérimenté
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    mars 2005
    Messages
    1 019
    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 : 1 019
    Points : 1 571
    Points
    1 571

    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 du Club
    Profil pro
    Inscrit en
    avril 2010
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2010
    Messages : 93
    Points : 67
    Points
    67

    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
    2 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : mars 2005
    Messages : 2 935
    Points : 7 978
    Points
    7 978

    Par défaut

    Alors que dirais-tu de déplacer ta discussion du forum Delphi vers le forum Lazarus ?
    Delphi 5 Pro - Delphi 10.1 Berlin Starter Edition - CodeTyphon 6.15 sous Win 7 et 5.20 sous Ubuntu 14.04
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    avril 2010
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2010
    Messages : 93
    Points : 67
    Points
    67

    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 du Club
    Profil pro
    Inscrit en
    avril 2010
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2010
    Messages : 93
    Points : 67
    Points
    67

    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
    Avatar de Jipété
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    6 090
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : juillet 2006
    Messages : 6 090
    Points : 8 351
    Points
    8 351

    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 confirmé

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

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

    Informations forums :
    Inscription : octobre 2009
    Messages : 115
    Points : 534
    Points
    534

    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 du Club
    Profil pro
    Inscrit en
    avril 2010
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2010
    Messages : 93
    Points : 67
    Points
    67

    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, 21h50
  2. Réponses: 0
    Dernier message: 05/06/2009, 11h34
  3. Nom de fichiers accentués
    Par isildur37 dans le forum C++
    Réponses: 2
    Dernier message: 15/05/2009, 12h07
  4. zipfile nom de fichier accentués
    Par jihemd dans le forum Général Python
    Réponses: 2
    Dernier message: 22/12/2006, 01h09

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