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

C++ Discussion :

Apostrophe sur un nom de fichier en paramètre


Sujet :

C++

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 704
    Points
    704
    Par défaut Apostrophe sur un nom de fichier en paramètre
    Bonjour,

    J'ai un soucis avec le passage en paramètres de certains fichiers, pour mon application sous Windows. Je m'explique :

    Mon soft, codé en C/C++, commence par un très classique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main (int argc, char* argv []) {[...]}
    J'ai associé à mon application des fichiers avec une extension particulière. Donc quand je double clique sur un fichier dans l'explorateur Windows, ce dernier lance mon appli avec le fichier double-cliqué en paramètre. Cependant, si ce fichier contient un caractère ' (= une simple apostrophe), il n'est pas contenu dans "argv"... en gros si je clique sur le fichier "c:\It'sMyFile.ext" argv[1] contiendra "c:\ItsMyFile.ext"... Ce qui bien évidemment pose problème puisque quand j'essaie d'ouvrir ce fichier, il n'existe pas...

    Avez-vous une idée de comment résoudre ce problème ?

  2. #2
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Bizarre...qu'est-ce qu'il te dis quand tu utilises la version wchar_t du main?

    int wmain( int argc, wchar_t* argv[], wchar_t* envp[] )
    (c'est spécifique aux compilos de microsoft)


    Je pense pas que ça va résoudre ton problème mais autant essayer. Tu peux aussi tenter voir en faisant un WinMain a la place, peut être que dans ce cas les arguments venant de windows sont plus corrects.

    Sinon, j'aurais bien vu le problème si c'était en mode console mais si tu dis que c'est envoyé par l'association de projet, il se peut que ce soit un bug d'explorer...
    Tu es sous windows XP?

  3. #3
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    Le plus simple (si tu n'arrives pas à résoudre le problème) est d'avertir les utilisateurs que leur nom de fichier ne doit pas comporter de '
    L'apostrophe n'est pas interdite sous windows ? Sous linux, je viens de tester, ca fonctionne et en plus si j'ouvre le fichier (t'est) sous un éditeur basique de texte, ca fonctionne aussi :-)

    Bonne chance pour la suite.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Essaie en ajoutant des guillemets autour du paramètre.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 622
    Points
    23 622
    Par défaut
    +1 pour les guillemets mais c'est vrai que ça ne règle pas le problème de l'interface. Cependant, la manière dont ton programme sera appelé est stocké dans la base de registre (enfin, c'était vrai jusqu'à Win2000, je ne sais pas si c'est toujours le cas), dans un truc style Software->Microsoft->Windows->Shell->tonext. ... si quelqu'un veut bien donner la clé exacte ...

    Cela est probablement dû à la façon dont le shell interprète la ligne générée, mais malgré tout, vérifie si ta chaîne reçue ne contient vraiment pas cet apostrophe ou tout signe qui pourrait le remplacer. Il se peut que ce soit en fait la routine que tu utilises pour afficher ton paramètre qui l'ignore, même si c'est peu probable.

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 704
    Points
    704
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Essaie en ajoutant des guillemets autour du paramètre.
    Euh non !

    En fait ce n'est pas moi qui donne le paramètre !
    Sinon ce serait plus simple, et il n'y aurait pas de problème !

    Le soucis vient quand on double clique sur un fichier dans l'explorateur de fichier, Windows me retourne un nom de fichier (sans guillemets) et surtout en supprimant les apostrophes ! Et je ne peux pas contrôler cela ! Moi je ne fais que récupérer ce que Windows me donne dans les arguments de mon "main"...

    Cependant, la manière dont ton programme sera appelé est stocké dans la base de registre (enfin, c'était vrai jusqu'à Win2000, je ne sais pas si c'est toujours le cas), dans un truc style Software->Microsoft->Windows->Shell->tonext. ... si quelqu'un veut bien donner la clé exacte ...
    Je vais regarder par là !

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Outils-> Option des dossiers -> Types de fichier : Tu y trouves les options pour ouvrir les fichiers, et tu rajoute les guillemets à la ligne de commande...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 704
    Points
    704
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Outils-> Option des dossiers -> Types de fichier : Tu y trouves les options pour ouvrir les fichiers, et tu rajoute les guillemets à la ligne de commande...
    Certes mais je ne vais pas me déplaccer chez tous mes clients pour faire l'opération !

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Alors, tu peux le faire par le registre.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. test sur des noms de fichiers php
    Par argonath dans le forum Langage
    Réponses: 5
    Dernier message: 27/09/2009, 21h47
  2. Réponses: 1
    Dernier message: 04/07/2009, 14h17
  3. Les accents sur les noms des fichiers passent mal
    Par fab53 dans le forum Langage
    Réponses: 3
    Dernier message: 04/01/2008, 15h05
  4. Test sur un nom de fichier
    Par Ribéry dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 11/07/2006, 11h17
  5. [DOM] Problème d'accent sur les noms de fichier avec mon parseur
    Par ujoodha dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 06/04/2006, 21h55

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