我正在从事一个涉及解析XML文档的项目,我需要创建一个对文件起作用的打开和关闭函数。我有一个具有ifstream对象的类,并且两个函数使用同一对象关闭和打开。 问题在于,在打开功能中,对象默认情况下处于关闭状态,直到程序达到关闭功能,它始终返回。即使打开了文件,您也没有打开文件。 有没有一种方法可以使对象成为全局对象以便创建它,使其可以同时在两个函数中工作? 任何建议表示赞赏
class CommandParser
{
private:
std::ifstream inFile;
std::string pathAddress;
...
...
public:
void open(const std::string address);
void close();
void setPathAddress(const std::string newPathAddress);
};
//Defining file
void CommandParser::open(const std::string address)
{
inFile.open(address);
if(!inFile.fail())
{
throw std::runtime_error("Invalid path! \n");
}
else
{
setPathAddress(address);
std::cout << "Successfully opened the file ! \n";
parseFile();
}
}
void CommandParser::close()
{
if (inFile.is_open())
{
inFile.close();
std::cout << "Successfully closed file! \n";
}
else
std::cerr << "You didn't open a file ! \n";
}
答案 0 :(得分:1)
如果操作失败,则设置失败标志-因此,如果成功打开文件,则不会设置失败标志(除非之前已经设置过)。
所以最好的情况是!inFile.fail()
,但是要扔掉那个……。相反,您需要:
if( inFile.fail())
// ^ negation dropped!
{
// error
}
else
{
// success
}
或更简单:
if(inFile)
{
// success
}
else
{
// error
}
旁注:您应该通过const reference 接受字符串(否则const
毫无意义...):
void open(const std::string& address);
// ^