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 :

Caractères spéciaux dans un nom de fichier


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    STIC
    Inscrit en
    Janvier 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : STIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Caractères spéciaux dans un nom de fichier
    Bonjour,

    j'ai écrit un petit programme qui traite les fichiers texte, au début de programme, je fait entrer le chemin de fichier qui je veux le traiter, mais quand je mets un chemin avec voyelles accentuées, le programme ne lit pas ce fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    string distination;
    getline(cin,distination);
    ifstream fichierLu(distination,ios::in);
    if (fichierLu){
    ....
     
    }
    else
    cout<<"fichier n'existe pas"<<endl;
    donc quand je fait entrer par exemple " aprés.txt " il me dit que le fichier n'existe pas même s'il existe, SVP aidez moi

    Merci

  2. #2
    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 519
    Points
    41 519
    Par défaut
    Es-tu sous Windows?
    Sous Windows, la console utilise un encodage différent du reste du système, tu te retrouves alors à devoir convertir.

    Un code de ce genre a des chances de marcher:

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <windows.h>
    #include <string>
    #include <vector>
     
    string OemToCharCpp(string oemStr)
    {
    	vector<char> buf(oemStr.length()+1);
    	OemToCharBuff(oemStr.c_str(), &buf[0], oemStr.length()+1);
    	buf.at(oemStr.length()) = '\0'; //Just to be sure
    	return string(&buf[0]);
    }
    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.

  3. #3
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Sous windows, dans le meme dossier tu ne peux pas avoir un "après.txt" et un "apres.txt". Je presume donc que tu devrais pouvoir ouvrir ce fichier si tu envoies une chaine sans caractere accentue a ifstream.

  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 519
    Points
    41 519
    Par défaut
    C'est faux, je viens même de tester.
    La comparaison utilisée par Windows pour ses noms de fichier ignore la casse, mais pas les accents.
    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
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Oula exact, grosse erreur de ma part ! Navre pour la mauvaise info...

    Du coup apres une petite recherche sur l'api windows a cette page, il est bien dit que la fonction n'accepte que les noms de fichiers 8 bits (donc sans accent visiblement).

    Apres une recherche encore plus approfondie, les fonction CreateFileW et CreateFileA semblent gerer les caracteres unicode. Par-contre j'ai pas trouve d'equivalent pour open (genre OpenFileW...). Bizarre...

  6. #6
    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 519
    Points
    41 519
    Par défaut
    Tu confonds 8 bits et 7 bits.
    • 7 bits: ASCII, pas d'accent.
    • 8 bits: ASCII étendu, différents encodages pour différents accents: CP1252 (Windows, CreateFileA()) et CP850 (DOS, Windows Console, fgets()) ont le 'é' à différents codes.
      • Windows ne supporte pas UTF-8 à part pour convertir vers/depuis ce format.
    • 16 bits: UTF-16 (Java, .Net, Windows, CreateFileW()), tout Unicode supporté (20.09 bits).
    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.

  7. #7
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    @Médinoc: decidement j'en aurais appris. Merci bien ! Je me demande juste la difference entre les 7 et 8 bits pour le coup. Y a un des deux qui est stocke en unsigned char ou c'est autre chose ? Je pensais que les caracteres avec accent n'etaient geres que avec les wchar_t qui eux sont apparemment representes sur 2 octets.

  8. #8
    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 519
    Points
    41 519
    Par défaut
    7 bits, en pratique, je crois que ça ne se fait plus. C'était surtout du temps des anciennes machines, ou de communications par liaison série (RS232 supporte aussi bien 7 que 8 bits).

    Vu du C, en standard, le type char (ni signed ni unsigned) est garanti supporter de 0 à 127. Il est l'un des deux (signed -127/8 to +127 ou unsigned 0 to 255), mais l'implémentation est libre de choisir lequel.
    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. [File & Zip] Caractères spéciaux dans les noms de fichiers
    Par Marvelll dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 12/02/2010, 17h50
  2. Caractère spéciaux dans un nom de fichier
    Par eddie5150 dans le forum Java ME
    Réponses: 6
    Dernier message: 26/06/2008, 14h52
  3. Caractères spéciaux dans le nom des tables
    Par xx_FiFty_xx dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/06/2008, 12h30
  4. Caractères spéciaux dans les noms de variables POST
    Par guidav dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/09/2007, 13h36
  5. [RegEx] Caractères spéciaux dans le nom d'une variable
    Par Cartouche dans le forum Langage
    Réponses: 7
    Dernier message: 11/05/2007, 23h51

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