(C++) Fehler bei ifstream.open() - WIe erkennen ?



  • Guten Abend,
    ich bekomme beim Versuch eine ifstream zu öffnen NULL zurück ( unter Linux) .
    Ich würde nun gern wissen, was der Fehler ist. DIe Datei ist vorhanden, und "rw"

    Hanns



  • Hallo,
    also irgendwas scheinst du hier ganz böse durcheinander zu würfeln.

    ich bekomme beim Versuch eine ifstream zu öffnen

    Das riecht stark nach std::ifstream. Das wäre allerdings C++ und kein C. Und außerdem liefert die Methode open weder einen Wert, noch kann ein ifstream "rw" geöffnet werden.

    Was genau meinst du also?
    Vielleicht doch eher fopen?
    Poste doch einfach mal ein kleines Beispiel, das dein Problem verdeutlicht.



  • Original erstellt von ^Hanns:
    **Guten Abend,
    ich bekomme beim Versuch eine ifstream zu öffnen NULL zurück ( unter Linux) .
    Ich würde nun gern wissen, was der Fehler ist. DIe Datei ist vorhanden, und "rw"

    Hanns**

    1.) Falsches Forum. Du programmierst C++ und nicht ANSI C

    2.) std::ifstream.open() hat keinen Rückgabewert:

    void open ( const char * filename, openmode mode = in );

    Nachzulesen auf http://www.cplusplus.com/ref/iostream/ifstream/open.html

    #include <iostream>  // std::cout, std::endl
    #include <fstream>   // std::ifstream
    #include <string>    // std::string
    #include <cassert>   // std::assert
    
    int main(int argc, char** argv)
    {
      std::ifstream datei;
      std::string   zeile;
    
      datei.open( "main.cpp" );
    
      std::assert( datei.good() );
    
      datei.seekg( 0, std::ios::beg );
    
      while( ! datei.eof() )
        {
          getline( datei, zeile );
          std::cout << zeile << std::endl;
        }
      datei.close();
    
      return 0;
    };
    


  • HM, gehört wdoch nach c++, hab nicht gemerkt, daß ich das falsche Forum erwischt habe:

    Hier der Code -Auszug:

    // aus der .hh
            ifstream dataStream;                    // Kanal für Daten
            ifstream indexStream;                   // dto für Index
            ifstream memoStream;                    // für die MemoFelder
    
    //aus der .cc
    /*************************************************
    **  Datenbank öffnen                             *
    **************************************************/
    bool dBase::open(){
            indexOrd = 0;                   // kein Index gesetzt
            indexCount = 0 ;                // kein Index erfasst
            dataStream.open( dataFile,ios::binary);
    
            if ( ! dataStream ) return false;
    
            readDataHeader();               // erste DBF.Seite lesen
            readFieldInfo();                // und die Feldbeschreibungen
            indexStack.resize (5);          // Stack war bis dato nur deklariert
            stackPointer = -1;              // zeiger aufs erste element:
            _eof = false;
            _bof = false;
            _found = false;
            recordOffset = 0;
            if(withMemo) openMemo(dataFile);
            #ifdef _DB_DEBUG_
                    showDataHeader();
                    cerr << "datastream  = " << dataStream << endl;
                    cerr << "dataFile = " << dataFile << " return von open" << endl;
            #endif
        return true;
    }
    

    -Ich benötige in insgesamt 5 Klassen je einen dataStream ( und bei manchen auch einen memoStream)
    - DIe ARCHIV-Datei ist die vierte, die geöffnet werden soll.
    - Alle Dateien sind vorhanden
    - der Pfad ist korrekt
    - Groß/Kleinschreibung ist beachtet (linux)
    - Die Datei ist vorhanden, und hat Daten ( ca 76 MB )
    - SIe ist von keinem anderen Nutzer gesperrt
    - sie kann gelesen und geschrieben werden ( ich weiß, daß write hier nicht relevant ist )

    SO , nun fällt mir nichts weiter ein, was dem Öffnen eines inputstreames ncoh entgegestehen könnte. Und das ist mein Problem

    Hanns


Anmelden zum Antworten