Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Exception wird nicht abgefangen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.10.2007, 17:20 Uhr
WindDancer1



Hi Leute ,

bis vor kurzem habe ich Fehler noch über Rückgabewerte behndelt. Nun möchte ich das ganze über die effektiveren MFC-Exceptions machen.

Ich habe hier eine Funktion in der ich per Standarddialog eine Datei öffne, wenn ich nun von Hand den Namen einer Datei eingebe die nicht existiert möchte ich diesen Fehler abfangen !
Ich sitz schon den ganzen Tag dran aber es klappt einfach nicht und google liefert auch nichts brauchbares.

Hier der Code:

C/C++ Code:

C++:
    void CMokkaDoc::OnFileOpen()
{
CFileException fe;

iZaehlerNext = 0; // Wenn File öffnen Dlg geöffnet wird dann FileZähler auf 0 setzen
char strFilter[] = {"NFO-Files (*.nfo)|*.nfo|*.nfo||"};
CFileDialog fileDlg(TRUE,".nfo",NULL,0,strFilter);
CFile file; // Objekt der Klasse CFile erstellen


if(fileDlg.DoModal()==IDOK) // Dialogfeld öffnen und Ergebnis auffangen
{
m_strDateiname = fileDlg.GetFileName(); // Dateinamen des gewählten Files ermitteln
m_srtFilePathName = fileDlg.GetPathName(); // DateiPfad des gewählten Files ermitteln
m_strFileExtension = fileDlg.GetFileExt (); // DateiEndung des gewählten Files ermitteln

try
{
file.Open(fileDlg.GetFileName(), file.modeRead,&fe);// Ausgewählte Datei öffnen
str = new TCHAR[(file.GetLength())+1]; // TChar Array auf Heap schieben damit es dynamisch wird
str[(file.GetLength())] = '\0'; // TChar Array mit 0 terminieren
file.Read(str, file.GetLength()); // File lesen und Array str mit Werten füllen
}
catch(CFileException *pe)
{

MessageBox(0,"Fehler","Fehler",MB_OK);
}
}
cstrAusgabe = str; // Variable für die Ausgabe mit Inhalt(str) der Datei füllen
file.Close(); // File wieder schließen

UpdateAllViews (NULL); // View Aktualisieren
}    
C/C++ Code:

void CMokkaDoc::OnFileOpen()
{
    CFileException fe;

    iZaehlerNext = 0;                                // Wenn File öffnen Dlg geöffnet wird dann FileZähler auf 0 setzen        
    char        strFilter[] = {"NFO-Files (*.nfo)|*.nfo|*.nfo||"};
    CFileDialog fileDlg(TRUE,".nfo",NULL,0,strFilter);
    CFile        file;        // Objekt der Klasse CFile erstellen
    
                            
    if(fileDlg.DoModal()==IDOK)                         // Dialogfeld öffnen und Ergebnis auffangen
    {    
        m_strDateiname        = fileDlg.GetFileName();    // Dateinamen des gewählten Files ermitteln
        m_srtFilePathName    = fileDlg.GetPathName();    // DateiPfad  des gewählten Files  ermitteln
        m_strFileExtension    = fileDlg.GetFileExt ();    // DateiEndung des gewählten Files  ermitteln    
        
        try    
        {
            file.Open(fileDlg.GetFileName(), file.modeRead,&fe);// Ausgewählte Datei öffnen
            str = new TCHAR[(file.GetLength())+1];          // TChar Array auf Heap schieben damit es dynamisch wird
            str[(file.GetLength())] = '\0';                 // TChar Array mit 0 terminieren
            file.Read(str, file.GetLength()); // File lesen und Array str mit Werten füllen
        }
        catch(CFileException *pe)
        {
        
            MessageBox(0,"Fehler","Fehler",MB_OK);
        }
    }            
        cstrAusgabe = str;                                // Variable für die Ausgabe mit Inhalt(str) der Datei füllen
        file.Close();                                    // File wieder schließen          

     UpdateAllViews (NULL);                                // View Aktualisieren
}    





wäre super wenn Ihr mir helfen könntet ?!

Danke vorab

WinDDancer

Dieser Post wurde am 02.10.2007 um 17:40 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.10.2007, 17:50 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Einfach einen Blick in die Doku werfen


Zitat von MSDN:

While the CFile constructor will throw an exception in an error condition, Open will return FALSE for error conditions. Open can still initialize a CFileException object to describe the error, however. If you don't supply the pError parameter, or if you pass NULL for pError, Open will return FALSE and not throw a CFileException. If you pass a pointer to an existing CFileException, and Open encounters an error, the function will fill it with information describing that error. In neither case will Open throw an exception.


Dieser Post wurde am 02.10.2007 um 17:51 Uhr von Guybrush Threepwood editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.10.2007, 12:49 Uhr
WindDancer1



Danke für Deine Antwort Guybrush Threepwood aber in die MSDN hab ich geschaut und auch das gefunden was Du gepostet hast, aber ich komm nicht damit zurecht, wie muss ich denn nun die Sache bauen damit es klappt ?


Danke für eure Mühe

WD
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.10.2007, 13:41 Uhr
Tommix



Hallo,

C++:
try    
{
    CFile file(fileDlg.GetFileName(), file.modeRead);


usf.
Open ist C-isch konzipiert ("Open will return FALSE for error conditions...").

Gruß, Tommix

Dieser Post wurde am 03.10.2007 um 13:41 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.10.2007, 13:53 Uhr
WindDancer1



Hi Tommix,

dank für Deine Antwort, ich habs versucht aber da ich das ganze schon seit 2 Tagen versuche zu regeln klappt gar nichts mehr ;(
Wäre es zuviel verlangt wenn Du mir die Funktion aus obigem Source so umstellst dass sie funktioniert, ich seh grad den Wald vor lauter Bäumen nicht mehr !

Danke für Deine Hilfe

WD
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.10.2007, 00:12 Uhr
mmc20
puss in boots


hi, die exceptions funktionieren nur mit dem cfile-ctor, open kannste zwar ein exception-object mitgeben aber musst trotzdem den rückgabe wert checken

MSDN:

TRY
{
     CFile f( "blabla.txt", CFile::modeRead );
}
CATCH( CFileException, e )
{
     afxDump << "File could not be opened " << e->m_cause << "\n";
}
END_CATCH


Dieser Post wurde am 17.10.2007 um 00:12 Uhr von mmc20 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: