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 - datafiledataFile 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