Ifstream::get() C++
Fermé
sixela4
-
22 août 2011 à 22:36
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 23 août 2011 à 14:43
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 23 août 2011 à 14:43
3 réponses
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
Modifié par KX le 23/08/2011 à 00:16
Modifié par KX le 23/08/2011 à 00:16
C'est l'opérateur << qu'il faut utiliser pour ofstream, l'opérateur >> n'est pas défini !
La confiance n'exclut pas le contrôle
ifstream entree("a.txt");
ofstream sortie("b.txt");
char caractere = entree.get();
cout << caractere;
sortie << caractere;
La confiance n'exclut pas le contrôle
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
23 août 2011 à 07:48
23 août 2011 à 07:48
oui, il faut mettre le flux en premier puis les flèches qui vont bien et enfin la variable ; puis à nouveau éventuellement les flèches. Ce que tu fait est syntaxiquement correcte met tu mets le contenu de fichier dans caractère, pas étonnant que tu n'es pas ce que tu veux.
L'erreur que je commet généralement c'est caractère>>fichier; (l'inverse de toi) la logique est respecté, mais c'est faux :-(
L'erreur que je commet généralement c'est caractère>>fichier; (l'inverse de toi) la logique est respecté, mais c'est faux :-(
désolé, j'ai fait une erreur dans la question. Je n'ai pas internet sur l'ordinateur où je programme.
Pour info, mon IDE est Code::Blocks.
Voilà le principal du code:
<pre>
ifstream fluxAC(fichierAC.c_str());
if (fluxAC)
{
cout << "Choisissez un code : ";
cin >> code;
cout << "choisissez un nom (ex. \"c.cry\") : ";
cin >> fichierC;
ofstream fluxC(fichierC.c_str());
if (fluxC)
{
fluxAC.seekg(0,ios::end); //prend la taille du fichier
taille=fluxAC.tellg(); //prend la taille du fichier
fluxAC.seekg(0,ios::beg); //revient au début
while(fluxAC.tellg()<taille) //vérifie qu'il n'est pas à la fin
{
fluxAC.get(lettre); //prend une lettre
lettreCode=lettre; //prend la valeur unicode de la lettre
fluxC << lettre;
}
}
else
{
cout << "ERROR : impossible d'ecrire le nouveau fichier" << endl;
}
}
else
{
cout << "ERROR : fichier introuvable" << endl;
</pre>
Pour info, mon IDE est Code::Blocks.
Voilà le principal du code:
<pre>
ifstream fluxAC(fichierAC.c_str());
if (fluxAC)
{
cout << "Choisissez un code : ";
cin >> code;
cout << "choisissez un nom (ex. \"c.cry\") : ";
cin >> fichierC;
ofstream fluxC(fichierC.c_str());
if (fluxC)
{
fluxAC.seekg(0,ios::end); //prend la taille du fichier
taille=fluxAC.tellg(); //prend la taille du fichier
fluxAC.seekg(0,ios::beg); //revient au début
while(fluxAC.tellg()<taille) //vérifie qu'il n'est pas à la fin
{
fluxAC.get(lettre); //prend une lettre
lettreCode=lettre; //prend la valeur unicode de la lettre
fluxC << lettre;
}
}
else
{
cout << "ERROR : impossible d'ecrire le nouveau fichier" << endl;
}
}
else
{
cout << "ERROR : fichier introuvable" << endl;
</pre>
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
23 août 2011 à 14:06
23 août 2011 à 14:06
Il faudrait que tu indiques le type de tes variables (lettre et lettreCode au moins).
Quel est le but de ton programme exactement ?
Tes erreurs viennent très certainement de tes tellg() je ne vois pas du tout pourquoi tu te sers de ça ici, pour savoir si le fichier est terminé il suffit d'utiliser eof() pas la peine de faire des allers-retours comme ça pour connaître une taille de fichier en int (qui sera donc fausse au-dessus de 2Go)
Quel est le but de ton programme exactement ?
Tes erreurs viennent très certainement de tes tellg() je ne vois pas du tout pourquoi tu te sers de ça ici, pour savoir si le fichier est terminé il suffit d'utiliser eof() pas la peine de faire des allers-retours comme ça pour connaître une taille de fichier en int (qui sera donc fausse au-dessus de 2Go)
Merci beaucoup, mais pourrais-tu préciser? Je ne connais pas eof(). (Je débute).
lettre est un char.
lettreCode est un int.
En fait, j'ai enlever quelques lignes entre
lettreCode=lettre; //prend la valeur unicode de la lettre
et
fluxC << lettre;
je faisait quelques opérations sur les lettres (problème console Windows).
lettre est un char.
lettreCode est un int.
En fait, j'ai enlever quelques lignes entre
lettreCode=lettre; //prend la valeur unicode de la lettre
et
fluxC << lettre;
je faisait quelques opérations sur les lettres (problème console Windows).
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
Modifié par KX le 23/08/2011 à 14:46
Modifié par KX le 23/08/2011 à 14:46
Pour faire ce que je crois que tu veux faire, on peux faire comme ça :
Cependant, je ne suis pas sûr du tout que ça marche si c'est des fichiers binaire ou Unicode !
Cependant, je ne suis pas sûr du tout que ça marche si c'est des fichiers binaire ou Unicode !
int main() { ifstream entree("D:\\test2.jpg"); if (!entree.is_open()) return 1; ofstream sortie("D:\\test3.jpg"); if (!sortie.is_open()) { entree.close(); return 1; } int n; while (!entree.eof()) { n = entree.get(); cout << n << endl; sortie << (char) n; } sortie.close(); entree.close(); return 0; }