Bonsoir,
je souhaite faire une classe de manipulation de fichier, et mon problème se situe au niveau des appels à ma méthode readline(). Elle ne me retourne jamais rien, alors que le fichier n'est pas vide ...
Je ne comprends pas d'où provient l'erreur, vous auriez une idée ?
filereader.h
filereader.cpp
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
67
68
69
70
71
72
73
74
75
76
77
78 #ifndef _FILEMANAGER_H #define _FILEMANAGER_H #include <iostream> #include <fstream> using namespace std; class FileReader { // Nom du fichier string _filename; // Représente le flux ifstream _stream; // Ligne courante du fichier string _currentline; // Nombre de lignes du fichier long _linenumber; // Numéro de ligne courante long _currentlinenumber; // Indique la fin du fichier bool _eof; /** * Initialise les données-membres de la classe */ void init(); /** * Ouvre le flux et compte le nombre de lignes */ void open(const string& filename); /** * Ferme le flux */ void close(); public: /** * Constructeur d'initialisation */ FileReader(const string filename); /** * Destructeur */ ~FileReader(); /** * Retourne la prochaine ligne du flux */ string readline(); /** * Repositionne la lecture du flux au début */ void begin(); /** * Indique si le flux est ouvert */ bool isOpened(); inline string filename() const { return _filename; } inline void setFilename(const string& filename) { _filename = filename; } inline string currentline() const { return _currentline; } inline long linenumber() const { return _linenumber; } inline long currentlinenumber() const { return _currentlinenumber; } inline bool eof() const { return _eof; } }; #endif // _FILEMANAGER_H
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119 FileReader::FileReader(const string filename) { _filename = filename; open(_filename); } //------------------------------------------------------------------------------------------ /** * */ void FileReader::init() { _eof = false; _currentline = ""; _linenumber = 0; _currentlinenumber = 0; } //------------------------------------------------------------------------------------------ /** * */ FileReader::~FileReader() { close(); } //------------------------------------------------------------------------------------------ /** * */ void FileReader::open(const string& filename) { init(); _stream.open(filename.c_str(), ios::in|ios::binary); char c; if (isOpened()) { begin(); while (_stream.read ((char*) &c, sizeof(char)), !_stream.eof()) { if (c == '\n') { _linenumber++; } } begin(); } } //------------------------------------------------------------------------------------------ /** * */ void FileReader::close() { if (isOpened()) { _stream.close(); } } //------------------------------------------------------------------------------------------ /** * */ void FileReader::begin() { _stream.seekg(0, ios::beg); _currentlinenumber = 0; } //------------------------------------------------------------------------------------------ /** * */ string FileReader::readline() { //Quelle que soit la méthode d'extraction utilisée, ça ne marche pas!! getline(_stream, _currentline); /* char line[1024]; _stream.getline(line, 1024); _currentline = line; */ /* char c; _currentline = ""; while (_stream.get(c), !_stream.eof()) { _currentline += c; if (c == '\n') { break; } } */ if (_stream.eof()) { _eof = true; } return _currentline; } //------------------------------------------------------------------------------------------ /** * */ bool FileReader::isOpened() { return (_stream.good()); }
Partager