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



  • Welchen Datentyp hat dataFile?
    Bist Du sicher dass die Datei im Binärmodus geöffnet werden soll?
    Brauchst Du die Deklarationen im Header wirklich?



  • Welchen Datentyp hat dataFile?
    Bist Du sicher dass die Datei im Binärmodus geöffnet werden soll?
    Brauchst Du die Deklarationen im Header wirklich?

    - es ist eine *.dbf = dBase - datafile
    - ja, ich muss sie im Binärmodus öffen: leichteres Bearbeiten
    - und die dklaratione brauche ich,
    bei anderen Dateien lief es ja auch !

    Das Problem konnte also nur an der Dateiselbst liegen: was es auch tat, das Verzeichnis hatt die falschen Rechte (linux)

    Bleibt aber trotzdem die Frage ?
    Kann ich in c++ feststellen, warum ein ifstream nil zurückliefert ?

    (Selbst bei Basic war das möglich)

    Gruß Hanns



  • Original erstellt von ^Hanns:
    *- es ist eine .dbf = dBase - datafile

    dataFile sollte ein char* sein, ich wollte nicht den Dateityp sondern den Typ der Variable "dataFile" wissen.

    Was ist nil?



  • Original erstellt von nman:
    *dataFile sollte ein char sein, ich wollte nicht den Dateityp sondern den Typ der Variable "dataFile" wissen.

    Was ist nil?**

    nil ist NULL

    dataFIle ist char*

    Hanns


Anmelden zum Antworten