CStdioFile::ReadString funzt unter release nicht



  • aber warum läuft das ganze dann in der Debugversion

    Die Debug-Version setzt uninitialisierte Varíablen automatisch auf 0.



  • Muss ich generell alle Variablen initialisieren egal von welchem Typ ?

    Wenn er sie doch in der Release Version automatisch auf 0 setzt dann ist doch die variable initialisiert oder sehe ich das falsch ?



  • Hier mal ein Auszug aus meinem Programm

    ...
    CString gesp_tag;
    CStdioFile output, input;
    Date_temp = m_strPathTemp+"\\tempday.dat";
    output.Open(Date_temp, CFile::modeRead); // Datei des gesp. Datums öffnen
    output.ReadString(gesp_tag); // liest letztes gespeichertes Datum ein
    output.Close();
    ...



  • Dieser Code verursacht den Absturz NICHT.
    [edit](ausser, die Datei existiert nicht)

    [ Dieser Beitrag wurde am 30.06.2003 um 16:43 Uhr von RenéG editiert. ]



  • Wenn ich aber (siehe unten) eine Messagebox einbaue dann funzt es bis dahin

    ...
    CString gesp_tag;
    CStdioFile output, input;
    Date_temp = m_strPathTemp+"\\tempday.dat";
    output.Open(Date_temp, CFile::modeRead); // Datei des gesp. Datums öffnen

    // Hier baue ich die M.Box ein und bis hierhin funzt es

    output.ReadString(gesp_tag); // Fehler !!!

    // baue ich die M.Box hier ein erfolgt der Absturz.

    output.Close();
    ...



  • Schon mal versucht die Ausnahmen (CFileException) abzufangen? Vielleicht wirft ReadString aus irgendeinem Grund eine Ausnahme.

    [ Dieser Beitrag wurde am 30.06.2003 um 16:53 Uhr von Harrison Bergeron editiert. ]



  • Original erstellt von Harrison Bergeron:
    Schon mal versucht die Ausnahmen (CFileException) abzufangen? Vielleicht wirft ReadString aus irgendeinem Grund eine Ausnahme.



  • Nein habe ich noch nicht mit diese Klasse habe ich noch nicht gearbeitet kannst du mir vieleicht ein beispielcode geben

    danke



  • TRY
    {
      CString gesp_tag;
      CStdioFile output, input;
      Date_temp = m_strPathTemp+"\\tempday.dat";
      output.Open(Date_temp, CFile::modeRead); // Datei des gesp. Datums öffnen
      output.ReadString(gesp_tag); // liest letztes gespeichertes Datum ein
      output.Close();
    }
    CATCH (CFileException, e)
    {
      e->ReportError();
    }
    END_TRY
    

    [ Dieser Beitrag wurde am 30.06.2003 um 16:55 Uhr von Harrison Bergeron editiert. ]



  • Oder aber, man kopiert den Code aus der MSDN, der abprüft, ob Open überhaupt erfolgreich war:

    if( output.Open(Date_temp, CFile::modeRead)) // Datei des gesp. Datums öffnen
      output.ReadString(gesp_tag); // liest letztes gespeichertes Datum ein
    


  • Danke erstmal,

    Habe es soeben ausprobiert aber die MessageBox laut der MSDN-Doku mit der Fehlerdokumentierung erscheint nicht das Programm stürtzt einfach nur ab.



  • Ja stimmt die Datei wird nicht geöffnet anhand der MessageBox (siehe unten) die ich eingebaut habe konnte ich sie im Ablauf nicht sehen.

    CString gesp_tag;
    CStdioFile output, input;
    Date_temp = m_strPathTemp+"\\tempday.dat";
    if( output.Open(Date_temp, CFile::modeRead)) // Datei des gesp. Datums öffnen
    MessageBox("Hallo", "Info"); // Diese MessageBox erscheint nicht
    output.ReadString(gesp_tag); // liest letztes gespeichertes Datum ein

    Aber woran kann das liegen im debug modus läuft es ja immerhin ?



  • für den try/catch-Code müssen beim Compiler C++-Exceptions eingeschaltet sein!



  • In welchem Menü muss ich diese Einstellung tätigen?



  • Original erstellt von <Mike02>:
    In welchem Menü muss ich diese Einstellung tätigen?

    In der VisualC++ IDE:
    Projekteinstellungen->C/C++->Programmiersprache C++->Ausnahmebehandlung aktivieren

    Ausnahmebehandlung ist meines Wissens eine Voreinstellung, ist also bei einem neuen Projekt automatisch mit drin.


Anmelden zum Antworten