我正在尝试为文件创建一个包装器 - 这是fstream的一个小包装器。我正在制作一些想要读/写二进制和文本到文件的东西,所以我可以用同样的方式让模型加载器说话。
我有一个问题:当我在ObjLoader.cpp中调用此文件时,为什么我的文件没有打开?
Scatterbrain::Log *_file = new Scatterbrain::Log( path, false, true );
if( ! _file->Works() )
std::cout << "Error!!";
在scatterbrain.h中有这个吗?我确定我已经包含了必要的标题,因为一切编译都很好,所以我认为它必须是我写文件打开调用的方式的语义问题? - 它被称为..
namespace Scatterbrain
{
class Log
{
private:
std::string name;
bool rOnly;
bool isBinary;
int numBytes;
std::fstream file;
protected:
virtual int SizeBytes() { numBytes = (file) ? (int) file->tellg() : 0; return numBytes; }
public:
Log(){}
Log( std::string filename, bool append, bool readOnly )
{
if(FileExists(filename))
{
name = filename;
rOnly = readOnly;
file.open( name.c_str(), ((readOnly) ? int(std::ios::out) : int(std::ios::in |std::ios::out)) | ((append) ? int(std::ios::app) : int(std::ios::trunc)) );
}
}
virtual bool Works() { return (file.is_open() && file.good() ); }
由于
答案 0 :(得分:0)
关于这一切有很多可以说的,所以我只是把它放在评论中:
class Log
{
private:
std::string name;
bool rOnly;
std::fstream file;
public:
Log(){}
Log( std::string filename, bool append, bool readOnly)
: name(filename), // Use initializer lists
rOnly(readOnly),
file(filename, (readOnly ? std::ios::out : std::ios::in | std::ios::out) |
(append ? std::ios::app : std::ios::trunc))
{
// Why check if the file exists? Just try to open it...
// Unless, of course, you want to prevent people from creating
// new log files.
}
virtual bool Works()
{
// Just use the fstream's operator bool() to check if it's good
return file;
}
};
简而言之:
new
...我不知道为什么你是第一个,或者为什么要编译它。operator bool()
功能查看它是否“正常”。