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 :

Lire un fichier uniquement si le fichier est prédéterminé


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Travail non informatique
    Inscrit en
    Décembre 2010
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Travail non informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 102
    Points : 179
    Points
    179
    Par défaut Lire un fichier uniquement si le fichier est prédéterminé
    Bonjour.
    Je veux écrire un programme de cryptage (modification de fichier ASCII, caractère ASCII par caractère ASCII, en C++).
    Je bloque sur la lecture de caractère :
    En mettant le nom du fichier dans le code, cela fonctionne, mais pas avec un nom de fichier sous la forme d'une variable (chaine).
    Merci de m'indiquer comment faire, svp.
    PS : Code:Blocks 13.12,GNU GCC Compiler 5.2.1-22ubuntu2, C++, Lubuntu 15.10.

    Exemple, plagié d'un site de tutoriels :
    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
     
    #include <iostream>
    #include <fstream>
    using namespace std;
    int main()
    {
    string Lieu = "test.txt";
    /*
    cout << "De quel fichier ASCII voulez-vous le premier octet ?" << endl;
    cin >> Lieu;
    */
           ifstream fichier("test.txt", ios::in);  // on ouvre "test.txt".  OK !!
    //     ifstream fichier(Lieu, ios::in);  // on ouvre "test.txt".    ERREUR !
            if(fichier)
            {
                    char caractere;  // notre variable où sera stocké le caractère
                    fichier.get(caractere);  // on lit un caractère et on le stocke dans caractere
                    cout << caractere;  // on l'affiche
                    fichier.close();
            }
            else
                    cerr << "Impossible d'ouvrir le fichier !" << endl;
            return 0;
    }

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 562
    Points : 7 628
    Points
    7 628
    Par défaut
    Bonjour,

    le problème vient probablement du cin >> Lieu;. La lecture dans un flux est source d'anomalie, par exemple :
    • Le flux est en erreur, la lecture ne se fait pas
    • Il reste des caractères à lire, le texte reçu aura des caractères en trop
    • Plusieurs caractères dont l'espace et le CR sont des séparateurs (p.e: "mon fichier.txt" renvoit "mon")

    Ajoute cout << "*" << Lieu << "*" << std::endl; pour mieux voir le contenu de |c]Lieu[/c].

  3. #3
    Membre habitué
    Profil pro
    Travail non informatique
    Inscrit en
    Décembre 2010
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Travail non informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 102
    Points : 179
    Points
    179
    Par défaut Merci.
    Bonjour.
    Merci.
    Voici une première version.
    La demande ne fonctionne pas.
    Je vais tenter une conversion en plus.
    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
     
    #include <iostream>
    #include <fstream>
    using namespace std;
    int main()
    {
      char* Lieu = "test.txt"; // Erreur avec string !
    /*
    cout << "De quel fichier ASCII voulez-vous le premier octet ?" << endl;
    cin >> Lieu;
    */
     
         ifstream fichier( Lieu, ios::in); // on ouvre "test.txt".  //  Erreur avec string, corrigée par char* !
     
            if(fichier)
            {
                    char caractere;  // notre variable où sera stocké le caractère
                    fichier.get(caractere);  // on lit un caractère et on le stocke dans "caractere".
                    cout << caractere;  // on l'affiche
                    fichier.close();
            }
            else
                    cerr << "Impossible d'ouvrir le fichier !" << endl;
            return 0;
    }

  4. #4
    Membre habitué
    Profil pro
    Travail non informatique
    Inscrit en
    Décembre 2010
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Travail non informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 102
    Points : 179
    Points
    179
    Par défaut Conversion !
    Puisque cin fait une chaine et que ifstream demande un char*, il faut convertir.
    Il est mieux de le faire au dernier moment !

    Merci à tous, y compris à "MM" qui m'a très fortement aidé oralement et sur mon ordinateur.
    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
     
    #include <iostream>
    #include <fstream>
    using namespace std;
    int main()
    {
     
    string Lieu = "test.txt";
    cout << "De quel fichier ASCII voulez-vous le premier octet ?" << endl;
    cin >> Lieu;
         ifstream fichier( Lieu.c_str(), ios::in); // Lieu.c_str() convertit la chaine "Lieu" en char* !
            if(fichier)
            {
                    char caractere;  // notre variable où sera stocké le caractère
                    fichier.get(caractere);  // on lit un caractère et on le stocke dans "caractere".
                    cout << caractere;  // on l'affiche
                    fichier.close();
            }
            else
                    cerr << "Impossible d'ouvrir le fichier !" << endl;
            return 0;
    }

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

Discussions similaires

  1. faire pointer un fichier unique vers différents fichiers
    Par laurentSc dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 24/05/2011, 12h09
  2. faire pointer un fichier unique vers différents fichiers
    Par laurentSc dans le forum Langage
    Réponses: 2
    Dernier message: 23/05/2011, 23h53
  3. lire un fichier excel mais Excel n'est pas installé
    Par alain_m dans le forum VBScript
    Réponses: 6
    Dernier message: 15/01/2011, 10h44
  4. [AC-2007] Ouvrir fichier Excel uniquement s'il n'est pas déjà ouvert
    Par damsmut dans le forum Access
    Réponses: 2
    Dernier message: 30/03/2010, 09h54
  5. [XML] Lire un fichier uniquement via mon application ?
    Par charliejo dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 20/01/2006, 17h26

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