Bonjour à toutes et tous.
En général, je trouve plus ou moins facilement les réponses à mes problèmes sur le net (cours, tuto ou forum) mais là...
Je travail sur un module de lecture/écriture de fichier en mode binaire. J'ai donc fais simple pour l'instant :
-deux fonctions, une lire et une écrire
-un main qui teste les deux fonctions avec du texte (uniquement pour le test car la finalité est bien avec du binaire)
Mon problème est le suivant, j'écris ma donnée dans le fichier -> OK, pas de problème; Je lis est affiche ma donnée lu dans le fichier -> lecture du fichier + données n'étant pas dans le fichier???; Je ne comprends pas d'où viennent ces données, si quelqu'un à une idée, je suis preneur.
Voici mon code :
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 #include <fstream> #include <iostream> using namespace std; char* lire(const char* nomfichier) { int size; char * memblock = NULL; ifstream file (nomfichier, ios::in|ios::binary|ios::ate); if (file.is_open()) { size = file.tellg(); //POUR TESTER LA TAILLE DE CE QUE J'ECRIS DANS LE FICHIER cout << "size in read : " << size << endl; memblock = new char [size]; file.seekg (0, ios::beg); //LECTURE DU FICHIER AVEC LA BONNE TAILLE VERIFIEE PLUS HAUT file.read (memblock, size); //ICI RIEN NE VA PLUS.... WTF cout << memblock << " : " << std::char_traits<char>::length(memblock) << '\n' << endl; file.close(); } else cout << "Unable to open file"; return memblock; } void ecrire(const char* nomfichier, const char* data) { int size; std::ofstream file (nomfichier, ios::out|ios::binary); //TEST DE LA TAILLE EN ECRITURE -> OK size = std::char_traits<char>::length(data); cout << "size in write : " << size << endl; file.write (data, size); file.close(); } int main(int argc, char *argv[]) { string data; data = "TEST, TEST 1, TEST 2"; //TEST DE LA DONNEE ET DE SA TAILLE cout << data << ' ' << std::char_traits<char>::length(data.c_str()) << '\n' << endl; ecrire("test.txt", data.c_str()); data = lire("test.txt"); cout << data << '\n' << endl; return 0; }
Et voici ce que j'obtiens en sortie
Comme vous le constatez, je lui demande de lire 20 octets dans mon fichier et le résultat en fait 30!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 TEST, TEST 1, TEST 2 20 size in write : 20 size in read : 20 TEST, TEST 1, TEST 2³²■▀└XÈ#♠Z : 30 TEST, TEST 1, TEST 2³²■▀└XÈ#♠Z
Merci d'avance.
PS : -système VISTA 32bits, IDE Codeblocks 13.12, compilateur Mingw32 (je ne me rappelle plus la version, ce n'est pas celle de codeblocks)
Partager