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
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
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
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());
}