[ifstream] problème de donnée-membre de type ifstream
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:
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:
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());
} |