<?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[Verschiedene Dialoge zum Dateiöffnen, ReadString führt zu Fehler]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe mir ein Dialog basiertes Programm geschrieben, in dem ich mir in einen RichEditor eine Datei lade. Die Dateiauswahl realisiere ich über den Datei Dialog.<br />
Nun wird bei betätigen eines anderen Buttons wiederum ein Dialog aufgerufen, in dem ich eine andere Datei auslesen will.<br />
Unabhängig funktionieren dies beiden Sachen auch. Nur wenn ich dann in meinen RichEditor die Datei geladen hab und dann denn zweiten Dialog aufrufe und dort eine Datei auslesen will, bekomm ich eine &quot;Assertion faild&quot; Meldung und zwar:<br />
File: fgets.C<br />
Expression str!=NULL<br />
Über den Debugger bin ich dann zu:<br />
BOOL CStdioFile:ReadString gelangt in der die fgetts-Funktion NULL zurückliefert, nur weiß ich nicht warum und was mir das sagen soll?<br />
Kann mir da jemand weiterhelfen oder einen Tipp geben, was ich besser machen kann?<br />
Der Code sieht wie folgt aus:</p>
<pre><code class="language-cpp">void CBiDlg::OnButton1(){

CString strDateiInhalt, strDateipfad;
DateiFunktionen datei;  //ist abgeleitete Klasse von CStdioFile
DateiDialog dlg(TRUE);  //DateiDialog ist abgeleitet von CFileDialog
dlg.Modal();
strDateipfad=dlg.m_ofn.lpstrFile;
if(datei.Open(strDateipfad,CFile::modeRead)){
int iLaen=datei.GetLength();
strDateiInhalt.ReleaseBuffer(Read(strDateiInhalt.GetBuffer(iLaen),iLaen));
datei.Close();
}
else
strDateiInhalt=&quot;Nix passiert&quot;;
SetDlgItemText(IDC_RichEdit_Datei, strDateiInhalt);
}

void CBiDlg::OnButton2(){

ArchivlistenDialog archDlg; //ist abgeleitet von CDialog
archDlg.DoModal();
}

void ArchivlistenDialog::OnButtonOK(){

CString strDateiEintrag;
CString strDateipfad=&quot;Test.txt&quot;;
CStdioFile datei;
if(datei.Open(strDateipfad,CFile::modeRead){
while(datei.ReadString(strDateiEintrag)||(!strDateiEintrag.IsEmpty())){ //diese Zeile führt zum Assertion failed

MessageBox(strDateiEintrag);
}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/173454/verschiedene-dialoge-zum-dateiöffnen-readstring-führt-zu-fehler</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 22:19:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/173454.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 15 Feb 2007 10:49:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verschiedene Dialoge zum Dateiöffnen, ReadString führt zu Fehler on Thu, 15 Feb 2007 10:49:29 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe mir ein Dialog basiertes Programm geschrieben, in dem ich mir in einen RichEditor eine Datei lade. Die Dateiauswahl realisiere ich über den Datei Dialog.<br />
Nun wird bei betätigen eines anderen Buttons wiederum ein Dialog aufgerufen, in dem ich eine andere Datei auslesen will.<br />
Unabhängig funktionieren dies beiden Sachen auch. Nur wenn ich dann in meinen RichEditor die Datei geladen hab und dann denn zweiten Dialog aufrufe und dort eine Datei auslesen will, bekomm ich eine &quot;Assertion faild&quot; Meldung und zwar:<br />
File: fgets.C<br />
Expression str!=NULL<br />
Über den Debugger bin ich dann zu:<br />
BOOL CStdioFile:ReadString gelangt in der die fgetts-Funktion NULL zurückliefert, nur weiß ich nicht warum und was mir das sagen soll?<br />
Kann mir da jemand weiterhelfen oder einen Tipp geben, was ich besser machen kann?<br />
Der Code sieht wie folgt aus:</p>
<pre><code class="language-cpp">void CBiDlg::OnButton1(){

CString strDateiInhalt, strDateipfad;
DateiFunktionen datei;  //ist abgeleitete Klasse von CStdioFile
DateiDialog dlg(TRUE);  //DateiDialog ist abgeleitet von CFileDialog
dlg.Modal();
strDateipfad=dlg.m_ofn.lpstrFile;
if(datei.Open(strDateipfad,CFile::modeRead)){
int iLaen=datei.GetLength();
strDateiInhalt.ReleaseBuffer(Read(strDateiInhalt.GetBuffer(iLaen),iLaen));
datei.Close();
}
else
strDateiInhalt=&quot;Nix passiert&quot;;
SetDlgItemText(IDC_RichEdit_Datei, strDateiInhalt);
}

void CBiDlg::OnButton2(){

ArchivlistenDialog archDlg; //ist abgeleitet von CDialog
archDlg.DoModal();
}

void ArchivlistenDialog::OnButtonOK(){

CString strDateiEintrag;
CString strDateipfad=&quot;Test.txt&quot;;
CStdioFile datei;
if(datei.Open(strDateipfad,CFile::modeRead){
while(datei.ReadString(strDateiEintrag)||(!strDateiEintrag.IsEmpty())){ //diese Zeile führt zum Assertion failed

MessageBox(strDateiEintrag);
}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1229331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1229331</guid><dc:creator><![CDATA[eisherz]]></dc:creator><pubDate>Thu, 15 Feb 2007 10:49:29 GMT</pubDate></item><item><title><![CDATA[Reply to Verschiedene Dialoge zum Dateiöffnen, ReadString führt zu Fehler on Fri, 16 Feb 2007 08:25:14 GMT]]></title><description><![CDATA[<p>Die Bedingung in der unteren while-Schleife ist (vermutlich) falsch - durch die Oder-Verknüpfung wird die Schleife erst verlassen, wenn das Dateiende erreicht (ReadString liefert FALSE) UND die letzte eingelesene Zeile leer ist (!isEmpty() liefert FALSE). Aber beim EOF setzt ReadString() den String nicht zurück, so daß du letzlich über das Dateiende hinausliest (und das mag fgets() nicht besonders, wie es scheint).</p>
<p>(und eigentlich reicht auch die Bedingung <code>while(readString(strDateiEintrag)...</code> aus, um zeilenweise bis zum Dateiende einzulesen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1229430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1229430</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 16 Feb 2007 08:25:14 GMT</pubDate></item><item><title><![CDATA[Reply to Verschiedene Dialoge zum Dateiöffnen, ReadString führt zu Fehler on Fri, 16 Feb 2007 19:06:02 GMT]]></title><description><![CDATA[<p>Danke für den Tipp mit der Bedingung für die while Schleife CStoll. Aber daran hat es nicht gelegen.<br />
Und wie schon gesagt, wenn ich die beiden Buttons nicht nacheinander benutze, sondern nur den OnButtonOK(), dann funktioniert alles.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1229751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1229751</guid><dc:creator><![CDATA[eisherz]]></dc:creator><pubDate>Fri, 16 Feb 2007 19:06:02 GMT</pubDate></item></channel></rss>