我制作了一个解析器类来接收一个大的文本文件并做各种事情。作为这个类的成员,我有一个 ifstream 对象被定义为ifstream fin
. 我有一个函数void SetFile(char* filename)
,它采用 c 字符串文字,应该调用fin.open()
以将流连接到文件,但由于某种原因,调用fin.fail()
后立即返回 true fin.open()
。这是我的解析器类,希望有人注意到我做错了什么!谢谢你的时间。
解析器.h
#ifndef PARSER_H
#define PARSER_H
#include <fstream>
#include <cstdlib>
#include "Heap.h"
#include "Word.h"
enum FILESTREAM_ERRORS{OPEN_ERROR};
class Parser
{
public:
Parser();
void SetFile(const char *filename);
void LoadHeap();
//private:
int word, line, paragraph;
ifstream fin;
Heap<Word> *wordheap;
void LoadWord();
};
Parser::Parser()
{
word = line = paragraph = 0;
}
void Parser::SetFile(const char* filename)
{
fin.open(filename);
if(fin.fail())
throw OPEN_ERROR;
}
void Parser::LoadWord()
{
QString wordstring;
char c;
fin.get(c);
if (c == '\n')
{
char p = fin.peek();
if (p == '\n')
{
fin.get(c);
paragraph++;
}
line++;
fin.get(c);
}
while (isblank(c))
fin.get(c);
while (!isblank(c))
wordstring.append(c);
word++;
cout << qPrintable(wordstring) << endl;
}
#endif // PARSER_H