Comment stocker une très grande variable std::string
Résolu/Fermé
CatEndal
Messages postés
39
Date d'inscription
samedi 25 mars 2017
Statut
Membre
Dernière intervention
3 mai 2018
-
10 août 2017 à 18:26
CatEndal Messages postés 39 Date d'inscription samedi 25 mars 2017 Statut Membre Dernière intervention 3 mai 2018 - 11 août 2017 à 17:47
CatEndal Messages postés 39 Date d'inscription samedi 25 mars 2017 Statut Membre Dernière intervention 3 mai 2018 - 11 août 2017 à 17:47
A voir également:
- Comment stocker une très grande variable std::string
- Comment faire une grande photo sur instagram - Guide
- Photo trop grande pour fond d'écran iphone ✓ - Forum iPhone
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp ✓ - Forum Word
- Photo trop grande pour fond d'écran smartphone ✓ - Forum Matériel & Système
3 réponses
Pruno57
Messages postés
3
Date d'inscription
jeudi 10 août 2017
Statut
Membre
Dernière intervention
11 août 2017
10 août 2017 à 19:42
10 août 2017 à 19:42
string n'a pas de limite normalement...
tu dois avoir un problème dans la lecture plutôt
là sans aucune ligne de code, c'est difficile de t'aider plus
tu dois avoir un problème dans la lecture plutôt
là sans aucune ligne de code, c'est difficile de t'aider plus
CatEndal
Messages postés
39
Date d'inscription
samedi 25 mars 2017
Statut
Membre
Dernière intervention
3 mai 2018
10 août 2017 à 20:26
10 août 2017 à 20:26
d'accord, voilà mon code
et voilà le avant/ après copie du fichier
https://img-19.ccm2.net/A5JPKE1O743ditO2L244XUMb_u8=/b07c9331f8f94f9bb147afb151b2e2ec/ccm-ugc/1Capture.PNG
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
void main()
{
string lire;
ifstream copy("F:/copie/copier/index.png");
ofstream colle("F:/copie/coller/index.png");
while (getline(copy, lire))
{
colle << lire << endl;
}
}
et voilà le avant/ après copie du fichier
https://img-19.ccm2.net/A5JPKE1O743ditO2L244XUMb_u8=/b07c9331f8f94f9bb147afb151b2e2ec/ccm-ugc/1Capture.PNG
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
11 août 2017 à 00:17
11 août 2017 à 00:17
'lut, pour copier des données binaires il ne faut jamais utiliser de flux ou fonctions qui agissent sur du texte (je parle bien de texte, pas de
Par défaut
Sur Windows, les retours à la ligne CR+LF peuvent être convertis en LF en interne dans certains cas, par exemple.
Maintenant, l'en-tête des PNG est le suivant:
Dans cette séquence, le 0x1A est le caractère de fin de fichier de DOS. La
La solution est donc en deux temps:
1. On ouvre les flux en mode binaire:
2. On utilise la formule magique™ au lieu de
Au passage,
std::string).
Par défaut
std::ifstreamet
std::ofstreamsont ouverts en mode texte, ce qui laisse libre choix à l'implémentation de la
stdlibc++de la plate-forme quant à l'interprétation et la modification à la volée de ce qui est lu et écrit.
Sur Windows, les retours à la ligne CR+LF peuvent être convertis en LF en interne dans certains cas, par exemple.
Maintenant, l'en-tête des PNG est le suivant:
{ 0x89, 'P', 'N', 'G', '\r', '\n', 0x1A, '\n' }
Dans cette séquence, le 0x1A est le caractère de fin de fichier de DOS. La
stdlibc++de Windows arrête de lire les fichiers quand elle rencontre ce caractère en mode texte.
La solution est donc en deux temps:
1. On ouvre les flux en mode binaire:
ifstream copy("F:/copie/copier/index.png", std::ios::binary); ofstream colle("F:/copie/coller/index.png", std::ios::binary);
2. On utilise la formule magique™ au lieu de
std::getline:
colle << copy.rdbuf();
std::ifstream::rdbuf()renvoie un pointeur vers l'objet agissant comme source de données, et les
std::ofstreamsavent les lire jusqu'à leur épuisement tout seuls (surcharge n°9), c'est à dire jusqu'à la fin du fichier.
Au passage,
using namespace std;est une mauvaise pratique car elle pollue ton espace de nom (namespace) avec le contenu de
std, ce qui peut poser des problèmes d'ambiguïtés et de conflits de nommage plus tard.
CatEndal
Messages postés
39
Date d'inscription
samedi 25 mars 2017
Statut
Membre
Dernière intervention
3 mai 2018
11 août 2017 à 17:47
11 août 2017 à 17:47
Super, ça marche, merci
et pour le
et pour le
using namespace std;je sais que cela peut poser des problèmes de conflits, mais je ne l'utilise que dans des programmes relativement simples comme celui ci