<?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[Absturz bei std::wifstream und read()]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab Daten in eine Datei geschrieben und möchte die Daten dort wieder auslesen. Jedoch stürtzt die Anwendung beim zweiten read() ab. Es werden Strukturen in die Datei geschrieben, 2 Strukturen + weitere je einen pro Datensatz.</p>
<p>Das Einlesen der ersten Struktur ist soweit ok, aber beim versuch die zweite Struktur einzulesen stürtzt die Anwendung ab. Die Fehlermeldung lautet etwa ...</p>
<p>&quot;Unbehandelte Ausnahme bei 0x000000 Meine.exe : 0xC0000005 Zugriffsverletzung beim Lesen an Position 0x0000000&quot;</p>
<p>Dann wird eine stelle in der streambuf markiert mit der zeile &quot;else if (_Traits::eq_int_type(_Traits::eof(), _Meta = uflow()))&quot;</p>
<p>Wenn ich nach dem ersten block mit good() prüfe liefert sie TRUE zurück, wenn ich mit tellg() mir die Position des lesepointers hole gibt er 0 zurück und bleibt 0 auch wenn ich mit seekg diesen setzten möchte. Beim setzten habe ich die größe der ersten Struktur probiert. eof() liefert kein TRUE zurück.</p>
<p>So schreibe ich die Daten</p>
<pre><code class="language-cpp">wofstream pFileStream;
IMBUE_NULL_CODECVT(pFileStream) ;
pFileStream.open(sTargetFilepath.c_str(), ios::out | ios::binary | ios::trunc); 

struct LANGFILEHEADER_STRUCT		pHeaderblock;
struct LANGFILEINFORMATION_STRUCT	pInfoblock;
struct LANGFILESTRINGDATA_STRUCT	pDatablock;

// Quelltext zum befüllen der Struktur rausgeschnitten

pFileStream.write(reinterpret_cast&lt;wchar_t*&gt;(&amp;pHeaderblock), sizeof(pHeaderblock)); 

// Quelltext zum befüllen der Struktur rausgeschnitten

pFileStream.write(reinterpret_cast&lt;wchar_t*&gt;(&amp;pInfoblock), sizeof(pInfoblock));
</code></pre>
<p>So lese ich die Daten ... bzw versuche es</p>
<pre><code class="language-cpp">wifstream pFileStream;
IMBUE_NULL_CODECVT(pFileStream) ;
pFileStream.open(pDateiDialog.GetPathName().GetBuffer(), ios::in | ios::binary); 

struct LANGFILEHEADER_STRUCT pHeaderblock;
struct LANGFILEINFORMATION_STRUCT pInfoblock;
struct LANGFILESTRINGDATA_STRUCT pDatablock;

pFileStream.read(reinterpret_cast&lt;wchar_t*&gt;(&amp;pHeaderblock), sizeof(pHeaderblock)); 

/*
Bei dem folgenden read() stürtzt die Anwendung ab. Wie gesagt liefert vor 
dem Aufruf good() ein TRUE zurück, EOF() ein FALSE und tellg() 0 (aber nicht -1)
und seekg() scheint den  Wert von tellg() nicht zu beeinflussen
*/
pFileStream.read(reinterpret_cast&lt;wchar_t*&gt;(&amp;pInfoblock), sizeof(pInfoblock));
</code></pre>
<p>Die erste Struktur wird ohne Probleme eingelesen, die Daten sind dann auch vorhanden. Ohne den zweiten read() Auruf stürtzt die Anwendung nicht ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/219209/absturz-bei-std-wifstream-und-read</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 08:53:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/219209.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Jul 2008 19:27:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Absturz bei std::wifstream und read() on Wed, 30 Jul 2008 19:27:24 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab Daten in eine Datei geschrieben und möchte die Daten dort wieder auslesen. Jedoch stürtzt die Anwendung beim zweiten read() ab. Es werden Strukturen in die Datei geschrieben, 2 Strukturen + weitere je einen pro Datensatz.</p>
<p>Das Einlesen der ersten Struktur ist soweit ok, aber beim versuch die zweite Struktur einzulesen stürtzt die Anwendung ab. Die Fehlermeldung lautet etwa ...</p>
<p>&quot;Unbehandelte Ausnahme bei 0x000000 Meine.exe : 0xC0000005 Zugriffsverletzung beim Lesen an Position 0x0000000&quot;</p>
<p>Dann wird eine stelle in der streambuf markiert mit der zeile &quot;else if (_Traits::eq_int_type(_Traits::eof(), _Meta = uflow()))&quot;</p>
<p>Wenn ich nach dem ersten block mit good() prüfe liefert sie TRUE zurück, wenn ich mit tellg() mir die Position des lesepointers hole gibt er 0 zurück und bleibt 0 auch wenn ich mit seekg diesen setzten möchte. Beim setzten habe ich die größe der ersten Struktur probiert. eof() liefert kein TRUE zurück.</p>
<p>So schreibe ich die Daten</p>
<pre><code class="language-cpp">wofstream pFileStream;
IMBUE_NULL_CODECVT(pFileStream) ;
pFileStream.open(sTargetFilepath.c_str(), ios::out | ios::binary | ios::trunc); 

struct LANGFILEHEADER_STRUCT		pHeaderblock;
struct LANGFILEINFORMATION_STRUCT	pInfoblock;
struct LANGFILESTRINGDATA_STRUCT	pDatablock;

// Quelltext zum befüllen der Struktur rausgeschnitten

pFileStream.write(reinterpret_cast&lt;wchar_t*&gt;(&amp;pHeaderblock), sizeof(pHeaderblock)); 

// Quelltext zum befüllen der Struktur rausgeschnitten

pFileStream.write(reinterpret_cast&lt;wchar_t*&gt;(&amp;pInfoblock), sizeof(pInfoblock));
</code></pre>
<p>So lese ich die Daten ... bzw versuche es</p>
<pre><code class="language-cpp">wifstream pFileStream;
IMBUE_NULL_CODECVT(pFileStream) ;
pFileStream.open(pDateiDialog.GetPathName().GetBuffer(), ios::in | ios::binary); 

struct LANGFILEHEADER_STRUCT pHeaderblock;
struct LANGFILEINFORMATION_STRUCT pInfoblock;
struct LANGFILESTRINGDATA_STRUCT pDatablock;

pFileStream.read(reinterpret_cast&lt;wchar_t*&gt;(&amp;pHeaderblock), sizeof(pHeaderblock)); 

/*
Bei dem folgenden read() stürtzt die Anwendung ab. Wie gesagt liefert vor 
dem Aufruf good() ein TRUE zurück, EOF() ein FALSE und tellg() 0 (aber nicht -1)
und seekg() scheint den  Wert von tellg() nicht zu beeinflussen
*/
pFileStream.read(reinterpret_cast&lt;wchar_t*&gt;(&amp;pInfoblock), sizeof(pInfoblock));
</code></pre>
<p>Die erste Struktur wird ohne Probleme eingelesen, die Daten sind dann auch vorhanden. Ohne den zweiten read() Auruf stürtzt die Anwendung nicht ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556623</guid><dc:creator><![CDATA[münsterländer]]></dc:creator><pubDate>Wed, 30 Jul 2008 19:27:24 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei std::wifstream und read() on Thu, 31 Jul 2008 05:46:01 GMT]]></title><description><![CDATA[<p>In einem Forum habe ich ein posting gefunden das von einem Bug bei tellg() berichtet, das der erste aufruf immer 0 zurückliefert. Wenn ich direkt nach den öffnen tellg() aufrufe, und dann nach dem ersten read() nochmal, dann wird mir '34' zurückgeliefert.</p>
<p>pHeaderblock ist 16 Bytes groß und zusammen mit dem &quot;Byte Order Mark&quot; macht das 17 * 2 da Unicode als Position '34'. Und die strukturen sind bei beiden Identisch (beim lesen und schreiben) und gleichgroß. Ich hab dann noch ein bissle mit seekg() rumgespielt aber dann bekomme ich meldungen mit stack around variable bla is corrupt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556757</guid><dc:creator><![CDATA[münsterländer]]></dc:creator><pubDate>Thu, 31 Jul 2008 05:46:01 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei std::wifstream und read() on Thu, 31 Jul 2008 10:22:41 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>warum verwendest du überhaupt einen <em>wifstream/wofstream</em>, wenn du binär aus der Datei liest/schreibst? Nutze einfach einen ifstream/ofstream, und dann sollte es besser aussehen.</p>
<p>MfG,</p>
<p>Probe-Nutzer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556923</guid><dc:creator><![CDATA[Probe-Nutzer]]></dc:creator><pubDate>Thu, 31 Jul 2008 10:22:41 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei std::wifstream und read() on Thu, 31 Jul 2008 10:48:32 GMT]]></title><description><![CDATA[<p>Also ich hab jetzt nochmal rumprobiert, letztendlich liegt es scheinbar nur an der zweiten Struktur. Senn ich diese mit seekg() einfach überspringe und die Strukturen der Datensätze einlesen funktioniert es. ich weiss nicht wieso aber bei der zweiten Struktur hat der seine probleme, es sind vier wchar_t Variablen drin. bei den anderen nur 4 x integer und bei den Datensätzen ein integer und eine wchar_t Variable.</p>
<blockquote>
<p>warum verwendest du überhaupt einen wifstream/wofstream, wenn du binär aus der Datei liest/schreibst? Nutze einfach einen ifstream/ofstream, und dann sollte es besser aussehen.</p>
</blockquote>
<p>Weil ich mir denke das ich nur so die Daten Unicode in die Datei bekomme. Würde ich ifstream/ofstream nehmen müsste ich selbst alles so umwandeln das ich das später wieder als unicode in die variablen bekomme.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556945</guid><dc:creator><![CDATA[münsterländer]]></dc:creator><pubDate>Thu, 31 Jul 2008 10:48:32 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei std::wifstream und read() on Thu, 31 Jul 2008 10:51:30 GMT]]></title><description><![CDATA[<p>münsterländer schrieb:</p>
<blockquote>
<p>Weil ich mir denke das ich nur so die Daten Unicode in die Datei bekomme. Würde ich ifstream/ofstream nehmen müsste ich selbst alles so umwandeln das ich das später wieder als unicode in die variablen bekomme.</p>
</blockquote>
<p>Äh, Du schreibst die Daten doch <strong>binär</strong>. In dieser Betrachtung gibt es nichtmal irgendwelche Zeichen, die Unicode sein könnten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556949</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 31 Jul 2008 10:51:30 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei std::wifstream und read() on Thu, 31 Jul 2008 13:08:22 GMT]]></title><description><![CDATA[<p>ok, ihr habt wohl recht. habs gerade umgestellt und jetzt scheints keine probleme mehr zugeben. hatte die befürchtung das sonderzeichen und schriftzeichen wie die japanischen usw nicht gespeichert werden wie es sollte. aber es funktioniert jetzt.</p>
<p>ich habe vor dem umstellen auf ifstream/ofstream schon wieder frust geschoben weil es in der Debug Version funktionierte aber in der Release nicht, dort isser wieder abgestürtzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1557030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1557030</guid><dc:creator><![CDATA[münsterländer]]></dc:creator><pubDate>Thu, 31 Jul 2008 13:08:22 GMT</pubDate></item></channel></rss>