2013-11-30 2 views
0

Я пытаюсь сделать обертку для файла - так что небольшая обертка для fstream. Я в процессе создания чего-то, что захочет читать/писать двоичные и текстовые файлы, поэтому я могу заставить загрузчиков моделей говорить одинаково.C++ fstream error unknown

У меня есть один вопрос: почему мой файл не открывается, когда я звоню с этим в 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

код для открытия файла вызывается только тогда, когда 'FileExists() == true;' вы это знаете? если файл не существует, ваш код не открывает какой-либо файл. Вы отлаживали это ??? –

+0

и что это такое: 'file = new std :: fstream;'? –

ответ

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

Короче говоря:

  1. Использование членов списки инициализатора
  2. не используйте new ... Я понятия не имею, почему вы были в первую очередь, или почему он скомпилирован, если это так.
  3. Используйте функцию operator bool(), чтобы узнать, хорошо ли это или нет.
+0

Выполнено, сделано и сделано, такая же ошибка. У меня есть много 0xcdcdcdcd и для файлового объекта: / – mynameisnafe