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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Travail non informatique
    Inscrit en
    Décembre 2010
    Messages
    104
    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 : 104
    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 confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 599
    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 actif
    Profil pro
    Travail non informatique
    Inscrit en
    Décembre 2010
    Messages
    104
    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 : 104
    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 actif
    Profil pro
    Travail non informatique
    Inscrit en
    Décembre 2010
    Messages
    104
    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 : 104
    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, 11h09
  2. faire pointer un fichier unique vers différents fichiers
    Par laurentSc dans le forum Langage
    Réponses: 2
    Dernier message: 23/05/2011, 22h53
  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, 09h44
  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, 08h54
  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, 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