<?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[ifstream größer als gelesen daten]]></title><description><![CDATA[<p>Hey Leute ich vertseh gerade nicht was mit meinem ifstream abgeht.<br />
Ich versuche eine meshdatei zu lese. Diese ist so strukturiert:<br />
ChunckHeader mit typ ( C_VERTICES,C_INDICES) und die gesamte Größe der folgenden Daten als DWORD.Danach kommt der chunck header abhängig vom typ, also für vertices oder <a href="http://indices.In" rel="nofollow">indices.In</a> diesen ist jeweils die anzahl und die größe eines Vertex oder index angegeben.Danach kommen die eigentlichen Vertex/Index Daten</p>
<p>Jetzt Lese ich eine datei mit solch einem Inhalt, bekomme als erstes die vertices , alles läuft perfekt ab, komme dann jedoch zum dateiende laut dem stream, obwohl die indexdaten noch folgen. Wenn ich die indexdaten in der datei weglasse verhält es sich genau so.<br />
Die Datei ist auch viel größer als die vertexdaten. Diese beträgt z.B ca 190kb, die Vertexdaten + ChunckHeader sind jedoch nur 120 kb aber trotzdem krieg ich mit tellg -1 raus was zum dateiende hindeutet.</p>
<p>Warum ist das so ???</p>
<p>Hier nochmal der Code :</p>
<pre><code>std::ifstream is(&quot;box2.vb&quot;);
	is.seekg(0,std::ios::end);
	size_t filesize = is.tellg();
	is.seekg(0, std::ios::beg);

	while(is.read((char*)&amp;h,sizeof(ChunckHeader)))
	{
		std::cout &lt;&lt; &quot;ChuckSize:&quot; &lt;&lt; h.m_chunckSize &lt;&lt; std::endl;
		switch (h.m_type)
		{
		case C_VERTICES:
			is.read((char*)&amp;vertChunck,sizeof(vertChunck));
			std::cout &lt;&lt; &quot;Read vert chunck num:&quot; &lt;&lt; vertChunck.m_count &lt;&lt; &quot; and total data size:&quot; &lt;&lt; h.m_chunckSize + sizeof(ChunckHeader) &lt;&lt; std::endl;
			vertices = new Vertex[vertChunck.m_count];
			is.read((char*)vertices,vertChunck.m_vertexSize*vertChunck.m_count);
			//std::cout &lt;&lt; vertices[0].Pos.x &lt;&lt; &quot; &quot; &lt;&lt; vertices[0].Pos.y &lt;&lt; &quot; &quot; &lt;&lt; vertices[0].Pos.z &lt;&lt; std::endl;
			break;
		case C_INDICES:
			std::cout &lt;&lt; &quot;Indices!&quot; &lt;&lt; std::endl;
			is.read((char*)&amp;indexChunck,sizeof(indexChunck));
			std::cout &lt;&lt; &quot;Read index chunck num:&quot; &lt;&lt; indexChunck.m_count &lt;&lt; std::endl;
			indices = new unsigned long[indexChunck.m_count];
			is.read((char*)indices,indexChunck.m_indexSize*indexChunck.m_count);
			std::cout &lt;&lt; indices[0] &lt;&lt; &quot; &quot; &lt;&lt; indices[1] &lt;&lt; &quot; &quot; &lt;&lt; indices[2] &lt;&lt; std::endl;
			ZeroMemory(&amp;h,sizeof(ChunckHeader));
			break;
		default:
			//skip
			std::cout &lt;&lt; &quot;§skip size:&quot; &lt;&lt; h.m_chunckSize &lt;&lt; std::endl;
			break;
		};
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/321009/ifstream-größer-als-gelesen-daten</link><generator>RSS for Node</generator><lastBuildDate>Tue, 21 Jul 2026 22:02:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321009.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 Oct 2013 20:40:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ifstream größer als gelesen daten on Sun, 20 Oct 2013 20:40:59 GMT]]></title><description><![CDATA[<p>Hey Leute ich vertseh gerade nicht was mit meinem ifstream abgeht.<br />
Ich versuche eine meshdatei zu lese. Diese ist so strukturiert:<br />
ChunckHeader mit typ ( C_VERTICES,C_INDICES) und die gesamte Größe der folgenden Daten als DWORD.Danach kommt der chunck header abhängig vom typ, also für vertices oder <a href="http://indices.In" rel="nofollow">indices.In</a> diesen ist jeweils die anzahl und die größe eines Vertex oder index angegeben.Danach kommen die eigentlichen Vertex/Index Daten</p>
<p>Jetzt Lese ich eine datei mit solch einem Inhalt, bekomme als erstes die vertices , alles läuft perfekt ab, komme dann jedoch zum dateiende laut dem stream, obwohl die indexdaten noch folgen. Wenn ich die indexdaten in der datei weglasse verhält es sich genau so.<br />
Die Datei ist auch viel größer als die vertexdaten. Diese beträgt z.B ca 190kb, die Vertexdaten + ChunckHeader sind jedoch nur 120 kb aber trotzdem krieg ich mit tellg -1 raus was zum dateiende hindeutet.</p>
<p>Warum ist das so ???</p>
<p>Hier nochmal der Code :</p>
<pre><code>std::ifstream is(&quot;box2.vb&quot;);
	is.seekg(0,std::ios::end);
	size_t filesize = is.tellg();
	is.seekg(0, std::ios::beg);

	while(is.read((char*)&amp;h,sizeof(ChunckHeader)))
	{
		std::cout &lt;&lt; &quot;ChuckSize:&quot; &lt;&lt; h.m_chunckSize &lt;&lt; std::endl;
		switch (h.m_type)
		{
		case C_VERTICES:
			is.read((char*)&amp;vertChunck,sizeof(vertChunck));
			std::cout &lt;&lt; &quot;Read vert chunck num:&quot; &lt;&lt; vertChunck.m_count &lt;&lt; &quot; and total data size:&quot; &lt;&lt; h.m_chunckSize + sizeof(ChunckHeader) &lt;&lt; std::endl;
			vertices = new Vertex[vertChunck.m_count];
			is.read((char*)vertices,vertChunck.m_vertexSize*vertChunck.m_count);
			//std::cout &lt;&lt; vertices[0].Pos.x &lt;&lt; &quot; &quot; &lt;&lt; vertices[0].Pos.y &lt;&lt; &quot; &quot; &lt;&lt; vertices[0].Pos.z &lt;&lt; std::endl;
			break;
		case C_INDICES:
			std::cout &lt;&lt; &quot;Indices!&quot; &lt;&lt; std::endl;
			is.read((char*)&amp;indexChunck,sizeof(indexChunck));
			std::cout &lt;&lt; &quot;Read index chunck num:&quot; &lt;&lt; indexChunck.m_count &lt;&lt; std::endl;
			indices = new unsigned long[indexChunck.m_count];
			is.read((char*)indices,indexChunck.m_indexSize*indexChunck.m_count);
			std::cout &lt;&lt; indices[0] &lt;&lt; &quot; &quot; &lt;&lt; indices[1] &lt;&lt; &quot; &quot; &lt;&lt; indices[2] &lt;&lt; std::endl;
			ZeroMemory(&amp;h,sizeof(ChunckHeader));
			break;
		default:
			//skip
			std::cout &lt;&lt; &quot;§skip size:&quot; &lt;&lt; h.m_chunckSize &lt;&lt; std::endl;
			break;
		};
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2361654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361654</guid><dc:creator><![CDATA[Bob Wolfskin]]></dc:creator><pubDate>Sun, 20 Oct 2013 20:40:59 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream größer als gelesen daten on Sat, 26 Oct 2013 10:10:51 GMT]]></title><description><![CDATA[<p>Das mit dem</p>
<pre><code>vertices = new Vertex[vertChunck.m_count];
            is.read((char*)vertices,vertChunck.m_vertexSize*vertChunck.m_count);
</code></pre>
<p>kommt mir komisch vor. Lesen tust du <code>vertexSize * count</code> Bytes, aber beim Anlegen des Arrays berücksichtigst du die Größe der Vertices nicht. Wie soll das funktionieren, dass dann trotzdem jedes Vertex in seinem entsprechenden Objekt im Array landet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2363046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2363046</guid><dc:creator><![CDATA[philipp2100]]></dc:creator><pubDate>Sat, 26 Oct 2013 10:10:51 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream größer als gelesen daten on Sat, 26 Oct 2013 10:37:17 GMT]]></title><description><![CDATA[<p>Das ist eine Binärdatei, richtig? Du öffnest sie gegenwärtig im Textmodus. Schreib mal</p>
<pre><code class="language-cpp">std::ifstream is(&quot;box2.vb&quot;, std::ios::binary);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2363055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2363055</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sat, 26 Oct 2013 10:37:17 GMT</pubDate></item></channel></rss>