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 :

Ajout de '\' dans une string


Sujet :

C++

  1. #61
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par rigobert
    Dans le même ordre d'idée, si en tout premier dans la fonction Importer() tu fais un file.is_open(), qu'obtiens-tu en retour ?
    en ce qui concerne le file.is_open il renvoi 0 ce qui me pârait logique compte tenu j'ai rien dans le flux
    est mon ami !!!

  2. #62
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    Laurent le code fourni precedemment ne suffit pas ?

    Car le code entier est assez conséquent.
    est mon ami !!!

  3. #63
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par Dark-Water
    Laurent le code fourni precedemment ne suffit pas ?

    Car le code entier est assez conséquent.
    Ce que tu pourrais faire (et ce que te demande Laurent), c'est isoler le problème : créer un bout de code très simple, très court (pourquoi pas uniquement un main) qui reproduise ton problème.

    Par exemple, essaie de créer un nouveau projet et de faire ça dans le main :
    - création d'une string et affectation du chemin du fichier
    - ouverture du fichier
    - test avec file.is_open()

    Si ton problème est toujours présent, tu nous donne ce code (qui serait directement compilable), et on pourrait ainsi tester chez nous, et te dire ce qui pose problème (du moins, si on le trouve ).

  4. #64
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    voila un bout de code qui illustre le bleme

    Attention y'a des MFC
    note le fichier a lire s'appelle 013
    Fichiers attachés Fichiers attachés
    est mon ami !!!

  5. #65
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bon, moi, j'ai pas les MFC... (et pas l'intention de les installer, du moins pas de suite...).

    Mais dis-moi ce que tu obtiens si tu compiles et exécutes le code suivant (avec un fichier c:\toto.txt qui existe, bien sûr !) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    #include <string>
    #include <iostream>
    #include <fstream>
     
    int main()
    {
        std::string path = "C:\\toto.txt";
     
        std::cout << "Fichier : " << path << std::endl;
     
        std::ifstream file(path.c_str());
     
        std::string line;
     
        if (file.is_open())
        {
            std::cout << "Fichier ouvert !" << std::endl;
     
            std::cout << "Contenu : " << std::endl;
     
            while ( ! file.eof() )
            {
                file >> line;
                std::cout << line << std::endl;
            }
        }
        else
        {
            std::cout << "Fichier non ouvert !" << std::endl;
        }
     
    }

  6. #66
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par Eusebe
    Bon, moi, j'ai pas les MFC... (et pas l'intention de les installer, du moins pas de suite...).
    Ben moi j'ai pas trop envie de les utiliser je deteste les MFC mais bon la j'ai été obligé.
    Citation Envoyé par Eusebe
    Mais dis-moi ce que tu obtiens si tu compiles et exécutes le code suivant (avec un fichier c:\toto.txt qui existe, bien sûr !) :
    Il marche nickel

    EDIT: bon ca y'est ca marche quand je met l'adresse du fichier en dur ds la variable mais pas kan j'utilise la boite de dialogue.
    j'avais laissé le ifstream f (path.c_str) c'est ca qui foutait la merde.

    Mais bon avec la boite de dialogue ca marche pas les chaines doivent etre différente
    est mon ami !!!

  7. #67
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par Dark-Water
    Il marche nickel
    Hein ?
    Là ça fonctionne alors que dans ton projet, si tu utilises une string initialisée avec "C:\\toto.txt" (donc la même chose), file.is_open te renvoie false ?

    C'est bien ça ?

  8. #68
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par Eusebe
    Hein ?
    Là ça fonctionne alors que dans ton projet, si tu utilises une string initialisée avec "C:\\toto.txt" (donc la même chose), file.is_open te renvoie false ?

    C'est bien ça ?
    ouep cf l'EDIT
    est mon ami !!!

  9. #69
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Ok, donc on reviens en arrière...
    Puisque les chaînes sont différentes, est-ce que tu peux nous donner leur représentation hexadécimale ?

  10. #70
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par Eusebe
    Ok, donc on reviens en arrière...
    Puisque les chaînes sont différentes, est-ce que tu peux nous donner leur représentation hexadécimale ?
    Heu comme on peut pas dire que j'ai à faire ca souvent ma question est simple :

    Je fais comment pour avoir leurs valeur en hexa ????
    est mon ami !!!

  11. #71
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        std::string path = "C:\\toto.txt";
     
        std::cout << "Fichier : " << path << std::endl;
     
        std::cout << "en hexa : ";
        for(int i=0; i < path.size(); ++i)
            std::cout << std::hex << (int)path[i];
        std::cout << std::dec << std::endl;
    Edit : ou encore, en le récupérant dans une autre string :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        std::string path = "C:\\toto.txt";
     
        std::cout << "Fichier : " << path << std::endl;
     
        std::string pathhexa;
        std::ostringstream oss;
        for(int i=0; i < path.size(); ++i)
            oss << std::hex << (int)path[i] << " ";
     
        pathhexa = oss.str();
     
        std::cout << "en hexa : " << pathhexa<< std::endl;

  12. #72
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    c'est les meme cad :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    433a5c746f7462e747874
    est mon ami !!!

  13. #73
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Non, là je te suis plus...

    Tu as dis :
    Citation Envoyé par Dark-Water
    EDIT: bon ca y'est ca marche quand je met l'adresse du fichier en dur ds la variable mais pas kan j'utilise la boite de dialogue.
    j'avais laissé le ifstream f (path.c_str) c'est ca qui foutait la merde.

    Mais bon avec la boite de dialogue ca marche pas les chaines doivent etre différente
    Et je suis d'accord avec toi, si ça fonctionne quand tu le met 'en dur' et pas en retour de la boite de dialogue, c'est que les chaînes sont différentes ! Et donc, ça ne peut pas être la même chose en hexa !

  14. #74
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Bon, après avoir (re) jeté un petit coup d'oeil au code posté, j'ai trouvé ce qui cloche

    Mais là, trop tard, je dois partir en weekend...
    "La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."

    G. CLEMENCEAU

  15. #75
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    je sais moi non plus j'y comprend plus rien
    est mon ami !!!

  16. #76
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par rigobert
    Bon, après avoir (re) jeté un petit coup d'oeil au code posté, j'ai trouvé ce qui cloche

    Mais là, trop tard, je dois partir en weekend...
    Nan, allez, je blaguais !

    Avant de donner la solution, je voudrais juste dire que faire du copié/collé de bouts de code c'est une chose (tous les programmeurs ou presque le font) ; mais faire plusieurs copié/collés de bouts de codes de manifestement différentes origines dans une même fonction sans se poser de questions, sans essayer un tant soit peu d'harmoniser le tout, c'est carrément n'importe quoi et ça produit ce (beau) résultat . A bon entendeur...

    La raison du bug, donc (extrêmement simple) :

    Lorsqu'aucun flag de partage n'est spécifié, CFile::Open() ouvre les fichiers en mode exclusif.
    Or, si tu regardes bien ton code, tu verras qu'ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(FileOpenDialog.DoModal()==IDOK)
    {
        VERIFY(File.Open(FileOpenDialog.GetPathName(),CFile::modeRead));
    }
    il y a un CFile::Open() qui ouvre ton fichier en mode exclusif ; et il n'est refermé que lorque la fonction s'achève (allocation automatique de CFile au début de la fonction).
    Ce qui fait donc que toute tentative de nouvelle ouverture du fichier entre-temps va forcément échouer, quelle que soit la méthode utilisée (STL, MFC, CRT...) puisque le verrou est posé au niveau du système.

    La solution : limiter la portée de l'objet CFile au bloc conditionnel dans lequel la vérification est faite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    //	CFile File;                    <<< supprimer ça
    	char* fichier;
    	
    	CString OpenFilter;
    	OpenFilter = "Text File (*.*)|*.*||";
    
    	CFileDialog FileOpenDialog(TRUE, NULL, NULL,
          OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST,
          OpenFilter,                       // filter
          AfxGetMainWnd());               // the parent window 
    	if (FileOpenDialog.DoModal()==IDOK)
    	{
    		CFile File;                    <<< rajouter ça
    		VERIFY(File.Open(FileOpenDialog.GetPathName(),CFile::modeRead));
    	}
    	...
    "La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."

    G. CLEMENCEAU

  17. #77
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut

    je l'avais deja soulevé ce probleme dans une autre partie de mon code et je l'ai oublié la !!!!!
    Un grand à tous pour votre aide et oui je suis un gros

    Respect rigobert tu m'as évité de me mettre une balle dans la tete avant le weekend

    Et encore merci à tous
    est mon ami !!!

  18. #78
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Manque plus qu'un clic sur

+ Répondre à la discussion
Cette discussion est résolue.
Page 4 sur 4 PremièrePremière 1234

Discussions similaires

  1. Ajout aléatoire d'une String dans une balise XML à partir d'un tableau de String
    Par chebmo1986 dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 19/03/2009, 11h21
  2. mettre un entier dans une string
    Par kinder29 dans le forum SL & STL
    Réponses: 14
    Dernier message: 14/02/2005, 11h54
  3. [DOM] sauver dans une String
    Par hocinema dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 28/09/2004, 21h44
  4. [Débutant][JSP] Ajout des caractères à une String...
    Par Henkyl dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 04/03/2004, 16h30
  5. [Syntaxe] mettre des ' dans une string ?
    Par souch dans le forum Débuter
    Réponses: 4
    Dernier message: 14/08/2003, 16h26

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