Fehler bei lesen/schreiben von Dateien



  • Ich benutze visual c++ 6.0 und windows nt.

    Ich habe zwei Konsolanwendungen geschrieben. Anwendung A soll Daten auf die Festplatte schreiben, Anwendung B soll diese aus der Datei auslesen und weiterverarbeiten. Folgende Bilbliotheken sind in der StdAFx.h eingebunden:

    #include "iostream"
    #include "fstream"
    using namespace std;

    Anwendung A schreibt die Daten folgendermaßen auf die Platte:

    ofstream AusSysOut("aAusSysSav.Dat",ios::app);

    AktAusSys.write( AusSysOut );
    AusSysOut.flush();

    AusSysOut.close();

    exit( 0 );

    Anwendung B ließt sie folgendermaßen ein:

    ifstream AusSysIn("aAusSysSav.Dat",ios::in);

    AktAusSys02.read( AusSysIn );

    AusSysIn.close();

    exit( 0 );

    Problem: Anwendung B stürtzt ab mit der Fehlermeldung:

    File:dbgheap.c
    Expression:_CrtIsValidHeapPointer(pUserData)

    Mekwürdiger weise funktioniert die Geschichte wenn ich in Anwendung A die datei mit dem Quellcode aus Anwendung B direkt wieder einlese. Die read und write Methoden sollten also Fehlerfrei sein ... Nur wenn ich das Einlesen mit Anwendung B versuche stürtzt das Programm ab. Oder wenn ich den exit() Befehl weglasse.

    Also noch mal in Kürze: Lesen und schrieben mit einem Programm geht. Schreiben mit einem und lesen mit einem anderen geht nicht ...

    Woran könnte das wohl liegen ...



  • Hast du beide Programme parallel gestartet? Wenn ja, dürfte Prog A während des Schreibens die Datei für sich reserviert haben.

    PS: Deine Fehlerkontrolle ist miserabel (um nicht zu sagen - nicht existent): bevor man einen Stream verwendet, sollte man erstmal überprüfen, ob er intakt ist:

    ifstream data(...);
    if(!data)
    {
      cerr<<"Fehler beim Öffnen!\n";
      exit(1);
    }
    ...
    


  • Die Programme laufen nicht gleichzeitig. Ich hab die Fehlermeldung eingebaut, aber daran lag es nicht. Es passiert beim Aufruf der read() funktionen ...

    Ich starte die Programme direkt vom Kompiler aus und nicht selbstständig ... aber daran kann es eigentlich auch nicht liegen ...



  • Ich weiß daß von Microsoft empfohlen wird nicht die alte fstream.h Klasse, sondern die neu fstream ( ohne .h ) zu verwenden, weil es einen ähnlichen Fehler bei Multithreading Anwendungen gibt ... vielleicht hilft diese Information ?



  • Vielleicht wäre es ja eine gute Idee, wenn du mal den Debugger anwirfst (bei der Debug-Assertion auf "Wiederholen" klicken) und herausfindest, in welcher Ecke deiner read()-Methode dieser Fehler auftritt.



  • Der Debugger möchte wissen wo dbgheap.c liegt ... Kenn ich nicht - kommt auch nicht in meinem Programm vor ... Mein Gott ich hab richtig Ahnung ... *lach*



  • Einmal auf Abbrechen klicken dürfte reichen - wenn er es nicht findet, spuckt er dir halt den Assambler-Code dazu aus. Und dann mußt du soweit den Call-Stack hochlaufen, bis du in deinem eigenen Code angekommen bist (dürfte eigentlich nicht zu übersehen sein, wenn die Funktionen klangvolle Namen bekommen).



  • Ich habe es versucht ... aber es ist weit und breit keine meiner Funktionen zu finden ... stattdessen möchte er nur noch mehr Quellcode Dateien haben mit denen ich nix zu tun habe.
    Also ich arbeite schon etwa drei Jahre mit dem Compiler nur habe ich bisher nie auf Festplatte geschrieben. Es ist also nicht so dass ich gar keine Ahnung habe. Aber der Fehler passiert mir halt zum ersten mal.

    Ich glaube das es mit den Bibliotheken zu tun hat. Auf dem Rechner hier ist noch ein uralt-Fortran Kompiler installiert ... von Microsoft ... kann es da nicht irgendeinen Mischmasch in den Bilbliotheken geben ? Der Administrator hat den C Kompiler irgendwie drüber oder dazu installiert ...

    Das Programm läuft mit meinen Klassen wenn ich die Daten nicht mit einer zweiten Anwendung öffnen will ... Mein Code kann also so schlecht nicht sein ...

    Ich weiß das ich in einer Ungünstigen Position bin meinen Quellcode zu loben ...



  • Übermut tut selten gut ich habs geschafft lag doch an der read Funktion ... Danke dass du Dich meiner Angenommen hast ...


Anmelden zum Antworten