<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Exception macht Probleme, Fehler wird nicht abgefangen]]></title><description><![CDATA[<p>Hi Leute <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ,</p>
<p>bis vor kurzem habe ich Fehler noch über Rückgabewerte behndelt. Nun möchte ich das ganze über die effektiveren MFC-Exceptions machen.</p>
<p>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 !<br />
Ich sitz schon den ganzen Tag dran aber es klappt einfach nicht und google liefert auch nichts brauchbares.</p>
<p>Hier der Code:</p>
<pre><code class="language-cpp">void CMokkaDoc::OnFileOpen() 
{
	CFileException fe;

	iZaehlerNext = 0;								// Wenn File öffnen Dlg geöffnet wird dann FileZähler auf 0 setzen		
	char		strFilter[] = {&quot;NFO-Files (*.nfo)|*.nfo|*.nfo||&quot;};
	CFileDialog fileDlg(TRUE,&quot;.nfo&quot;,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,&amp;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,&quot;Fehler&quot;,&quot;Fehler&quot;,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
}
</code></pre>
<p>wäre super wenn Ihr mir helfen könntet ?!</p>
<p>Danke vorab<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
ShadowEater</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/193990/exception-macht-probleme-fehler-wird-nicht-abgefangen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Apr 2026 04:35:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193990.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Oct 2007 14:38:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Exception macht Probleme, Fehler wird nicht abgefangen on Tue, 02 Oct 2007 14:38:49 GMT]]></title><description><![CDATA[<p>Hi Leute <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ,</p>
<p>bis vor kurzem habe ich Fehler noch über Rückgabewerte behndelt. Nun möchte ich das ganze über die effektiveren MFC-Exceptions machen.</p>
<p>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 !<br />
Ich sitz schon den ganzen Tag dran aber es klappt einfach nicht und google liefert auch nichts brauchbares.</p>
<p>Hier der Code:</p>
<pre><code class="language-cpp">void CMokkaDoc::OnFileOpen() 
{
	CFileException fe;

	iZaehlerNext = 0;								// Wenn File öffnen Dlg geöffnet wird dann FileZähler auf 0 setzen		
	char		strFilter[] = {&quot;NFO-Files (*.nfo)|*.nfo|*.nfo||&quot;};
	CFileDialog fileDlg(TRUE,&quot;.nfo&quot;,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,&amp;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,&quot;Fehler&quot;,&quot;Fehler&quot;,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
}
</code></pre>
<p>wäre super wenn Ihr mir helfen könntet ?!</p>
<p>Danke vorab<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
ShadowEater</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376647</guid><dc:creator><![CDATA[ShadowEater]]></dc:creator><pubDate>Tue, 02 Oct 2007 14:38:49 GMT</pubDate></item><item><title><![CDATA[Reply to Exception macht Probleme, Fehler wird nicht abgefangen on Tue, 02 Oct 2007 14:51:07 GMT]]></title><description><![CDATA[<p>Siehe MSDN:<br />
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.</p>
<p>Also einfach die Datei über den Konstrukor öffnen.<br />
Das CFile Objekt gehört in den try/catch Block. Der Close wir dadurch unnötig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376659</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 02 Oct 2007 14:51:07 GMT</pubDate></item><item><title><![CDATA[Reply to Exception macht Probleme, Fehler wird nicht abgefangen on Tue, 02 Oct 2007 14:51:23 GMT]]></title><description><![CDATA[<p>MSDN CFile::Open schrieb:</p>
<blockquote>
<p>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.</p>
</blockquote>
<p>Oder auf Deutsch: Open() wirft keine Exception, aber es füllt die übergebene CFileException mit den nötigen Informationen - werfen müsstest du sie schon selber, wenn du es drauf anlegst.</p>
<p>Alternativ kannst du dein File auch erst dort anlegen, wo du es benötigst:</p>
<pre><code class="language-cpp">try    
{
  CFile file(fileDlg.GetFileName(), file.modeRead,&amp;fe);
  str = new TCHAR[(file.GetLength())+1];
  str[(file.GetLength())] = '\0';
  file.Read(str, file.GetLength());
}
catch(CFileException *pe)//ich bin mir nicht sicher, aber solltest du nicht besser ein CFileException&amp; fangen?
{
  MessageBox(0,&quot;Fehler&quot;,&quot;Fehler&quot;,MB_OK);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1376660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376660</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 02 Oct 2007 14:51:23 GMT</pubDate></item><item><title><![CDATA[Reply to Exception macht Probleme, Fehler wird nicht abgefangen on Tue, 02 Oct 2007 15:03:54 GMT]]></title><description><![CDATA[<p>Hi,<br />
Danke für eure schnellen Antworten, ich hab alles so implementiert:</p>
<pre><code class="language-cpp">{
	CFileException fe;

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

try
{
	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 	

		file.Open(fileDlg.GetFileName(), file.modeRead,&amp;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,&quot;Fehler&quot;,&quot;Fehler&quot;,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
}
</code></pre>
<p>leider funktioniert es immer noch nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f622.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--crying_face"
      title=";("
      alt="😢"
    /></p>
<p>Gruß<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
ShadowEater</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376675</guid><dc:creator><![CDATA[ShadowEater]]></dc:creator><pubDate>Tue, 02 Oct 2007 15:03:54 GMT</pubDate></item><item><title><![CDATA[Reply to Exception macht Probleme, Fehler wird nicht abgefangen on Tue, 02 Oct 2007 15:05:26 GMT]]></title><description><![CDATA[<p>P.S.: Ich bekomme nur &quot;Debug Assertion failed...&quot;</p>
<p>Gruß<br />
ShadowEater</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376677</guid><dc:creator><![CDATA[ShadowEater]]></dc:creator><pubDate>Tue, 02 Oct 2007 15:05:26 GMT</pubDate></item><item><title><![CDATA[Reply to Exception macht Probleme, Fehler wird nicht abgefangen on Wed, 03 Oct 2007 10:39:56 GMT]]></title><description><![CDATA[<p>Hi ;),</p>
<p>kann mir da niemand weiterhelfen, es will einfach nicht klappen, liegt es daran dass ich das ganze in einem Standarddialog mache oder so ?<br />
Das sonderbare ist, wenn ich Exceptions in normalem C++ verwende klappt die Sache.<br />
Aber hier bekomme ich nach Eingabe eines nicht existenten Files nur eine Debug Assertion.</p>
<p>Danke<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
ShadowEater</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1377041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1377041</guid><dc:creator><![CDATA[ShadowEater]]></dc:creator><pubDate>Wed, 03 Oct 2007 10:39:56 GMT</pubDate></item><item><title><![CDATA[Reply to Exception macht Probleme, Fehler wird nicht abgefangen on Wed, 03 Oct 2007 16:22:05 GMT]]></title><description><![CDATA[<p>Hast Du nicht mal die Doku gelesen?<br />
Die Open Methode wirfst so keine Exception!</p>
<p>Nimm den Konstruktor!</p>
<pre><code class="language-cpp">CFile file(fileDlg.GetFileName(), file.modeRead);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1377323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1377323</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 03 Oct 2007 16:22:05 GMT</pubDate></item><item><title><![CDATA[Reply to Exception macht Probleme, Fehler wird nicht abgefangen on Thu, 04 Oct 2007 05:41:37 GMT]]></title><description><![CDATA[<p>Wenn Du schon open benutzt, dann den Fehler richtig behandeln.</p>
<pre><code class="language-cpp">if( file.Open(fileDlg.GetFileName(), file.modeRead,&amp;fe);// Ausgewählte Datei 
{
 //weiter
...
}
else
{
 // hier Fehlerbehandlung  nicht über catch
   char expbuf[256];
   fe.GetErrorMessage((LPTSTR)expbuf,255);
   TRACE(expbuf);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1377534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1377534</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 04 Oct 2007 05:41:37 GMT</pubDate></item><item><title><![CDATA[Reply to Exception macht Probleme, Fehler wird nicht abgefangen on Thu, 04 Oct 2007 05:58:35 GMT]]></title><description><![CDATA[<p>Einfacher wäre dann</p>
<pre><code class="language-cpp">if( file.Open(fileDlg.GetFileName(), file.modeRead,&amp;fe);// Ausgewählte Datei 
{
 //weiter
...
}
else
    throw &amp;fe;
</code></pre>
<p>fe sollte dann außerhalb des Try/Catch Blockes liegen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1377550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1377550</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 04 Oct 2007 05:58:35 GMT</pubDate></item><item><title><![CDATA[Reply to Exception macht Probleme, Fehler wird nicht abgefangen on Thu, 04 Oct 2007 06:25:09 GMT]]></title><description><![CDATA[<p>moeglichkeit waere auch in dem Try block</p>
<pre><code class="language-cpp">/*..*/
bool FileExist(const CString&amp; strFileName);

/*..*/

try
{
    /*..*/

    if(!FileExist(m_srtFilePathName))
        throw _T(&quot;File not exist&quot;);

    /*..*/
catch(
/*..*/
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1377564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1377564</guid><dc:creator><![CDATA[EXDW]]></dc:creator><pubDate>Thu, 04 Oct 2007 06:25:09 GMT</pubDate></item><item><title><![CDATA[Reply to Exception macht Probleme, Fehler wird nicht abgefangen on Thu, 04 Oct 2007 08:10:05 GMT]]></title><description><![CDATA[<p>Doch ich hab die Doku gelesen, hab aber trotzdem ne Fehlermeldung bekommen, Danke jetzt klappts !</p>
<p>Gruß<br />
SE</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1377602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1377602</guid><dc:creator><![CDATA[ShadowEater]]></dc:creator><pubDate>Thu, 04 Oct 2007 08:10:05 GMT</pubDate></item></channel></rss>