<?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[Probleme beim Lesen einer Datei]]></title><description><![CDATA[<p>Hallo</p>
<p>Also ich schreibe folgendes Programm: Ich habe eine csv Datei in der es mehrere Eitraege gibt. Diese Eintraege sind dafuer gedacht um eine Datenbank zu aktualisieren. Allerdings moechte ich aus Sicherheits-Gruenden eine Temporaere Datei erstellen und von dort die Daten Zeilenweise lesen. Die Tmp-Datei wird auch erstellt mit den richtigen Werten. Allerdings scheint es als ob die tmp-Datei Leer ist den es wird nichts ausgegeben. Ich benutze folgendes.</p>
<p>ich habe eine Methode Read() die so aussieht:</p>
<pre><code class="language-cpp">std::filebuf buf;
std::fstream file;
/...
DoOpen(buf, std::ios_base::in);
DoCreateTemporary(buf, file);
DoGoCurPos(file);
DoRead(file);
</code></pre>
<p>Die Definitionen der Methoden sehen so aus:</p>
<pre><code class="language-cpp">void DoOpen(std::filebuf&amp; buffer, std::ios_base::openmode mode)
{
	buffer.open(GetName().c_str(), mode);
	if(!buffer.is_open()) throw std::exception(&quot;can't open the buffer&quot;);
}

void DoCreateTemporary(std::filebuf&amp; buffer, std::fstream&amp; fileTmp)
{
	fileTmp.open(GetTempName().c_str(), std::ios_base::out);
	if(!fileTmp) throw std::exception(&quot;Can't open temporary&quot;);

	std::istream input(&amp;buffer);
	fileTmp &lt;&lt; input.rdbuf();

	buffer.close();
}
// Momentan lese ich die ganze Datei in einem Rutsch
// von da her weiss ich nicht ob diese Methode zu viel
// des Guten ist
void DoGoCurPos(std::fstream&amp; fileTmp)
{
	fileTmp.seekg(GetPosMark());
}

// Hier muss der Fehler schon passiert sein
// line bleibt auch nach der getline Funktion leer
void DoRead(std::fstream&amp; fileTmp)
{
	std::string line;
	while(fileTmp)
	{
		std::getline(fileTmp, line);
		internalStorage_.push_back(line);
		line.clear();
		if(fileTmp.eof()) fileTmp.setstate(std::ios::failbit);
	}
	fileTmp.clear();
	fileTmp.close();
}
</code></pre>
<p>Was ich noch sagen sollte ist dass <em>posMark_</em> im Konstruktor mit std::ios_base::beg initialisiert wird. Der Wert von <em>posMark_</em> wird in der Methode <strong>GetPosMark()</strong> abgefragt. Kann mir nicht weiter Helfen, wahrscheinlich benutze ich die stream-Funktionen anscheinend nicht ganz Richtig. Waehre Dankbar wenn mir jemand weiterhelfen koennte.</p>
<p>Liebe Grüße<br />
Spongebob011101</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/251698/probleme-beim-lesen-einer-datei</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 07:43:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/251698.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 08 Oct 2009 22:04:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme beim Lesen einer Datei on Thu, 08 Oct 2009 22:04:41 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Also ich schreibe folgendes Programm: Ich habe eine csv Datei in der es mehrere Eitraege gibt. Diese Eintraege sind dafuer gedacht um eine Datenbank zu aktualisieren. Allerdings moechte ich aus Sicherheits-Gruenden eine Temporaere Datei erstellen und von dort die Daten Zeilenweise lesen. Die Tmp-Datei wird auch erstellt mit den richtigen Werten. Allerdings scheint es als ob die tmp-Datei Leer ist den es wird nichts ausgegeben. Ich benutze folgendes.</p>
<p>ich habe eine Methode Read() die so aussieht:</p>
<pre><code class="language-cpp">std::filebuf buf;
std::fstream file;
/...
DoOpen(buf, std::ios_base::in);
DoCreateTemporary(buf, file);
DoGoCurPos(file);
DoRead(file);
</code></pre>
<p>Die Definitionen der Methoden sehen so aus:</p>
<pre><code class="language-cpp">void DoOpen(std::filebuf&amp; buffer, std::ios_base::openmode mode)
{
	buffer.open(GetName().c_str(), mode);
	if(!buffer.is_open()) throw std::exception(&quot;can't open the buffer&quot;);
}

void DoCreateTemporary(std::filebuf&amp; buffer, std::fstream&amp; fileTmp)
{
	fileTmp.open(GetTempName().c_str(), std::ios_base::out);
	if(!fileTmp) throw std::exception(&quot;Can't open temporary&quot;);

	std::istream input(&amp;buffer);
	fileTmp &lt;&lt; input.rdbuf();

	buffer.close();
}
// Momentan lese ich die ganze Datei in einem Rutsch
// von da her weiss ich nicht ob diese Methode zu viel
// des Guten ist
void DoGoCurPos(std::fstream&amp; fileTmp)
{
	fileTmp.seekg(GetPosMark());
}

// Hier muss der Fehler schon passiert sein
// line bleibt auch nach der getline Funktion leer
void DoRead(std::fstream&amp; fileTmp)
{
	std::string line;
	while(fileTmp)
	{
		std::getline(fileTmp, line);
		internalStorage_.push_back(line);
		line.clear();
		if(fileTmp.eof()) fileTmp.setstate(std::ios::failbit);
	}
	fileTmp.clear();
	fileTmp.close();
}
</code></pre>
<p>Was ich noch sagen sollte ist dass <em>posMark_</em> im Konstruktor mit std::ios_base::beg initialisiert wird. Der Wert von <em>posMark_</em> wird in der Methode <strong>GetPosMark()</strong> abgefragt. Kann mir nicht weiter Helfen, wahrscheinlich benutze ich die stream-Funktionen anscheinend nicht ganz Richtig. Waehre Dankbar wenn mir jemand weiterhelfen koennte.</p>
<p>Liebe Grüße<br />
Spongebob011101</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1789907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1789907</guid><dc:creator><![CDATA[Spongebob011101]]></dc:creator><pubDate>Thu, 08 Oct 2009 22:04:41 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Lesen einer Datei on Thu, 08 Oct 2009 23:26:57 GMT]]></title><description><![CDATA[<p>Ein kleiner Fehler, große Wirkung: Du hast fileTmp nur zum schreiben geöffnet, deswegen wird das nichts mit dem wiedereinlesen.</p>
<p>Kannst du mal etwas näher erläutern, was das bringen soll, eine Datei in eine andere zu kopieren und dann die Kopie einzulesen? Warum nicht gleich einlesen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1789930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1789930</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 08 Oct 2009 23:26:57 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Lesen einer Datei on Fri, 09 Oct 2009 12:10:24 GMT]]></title><description><![CDATA[<p>Danke erst mal fuer die Antwort. Zur deiner Frage: Ich dachte mir dass vielleicht beim Lesen Die Datei irgendwie beschedigt werden kann :D. Keine Ahnung ob es moeglich ist, aber wenn die Antwort ein klares nein ist wird der Code entsprechend angepasst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1790142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1790142</guid><dc:creator><![CDATA[Spongebob011101]]></dc:creator><pubDate>Fri, 09 Oct 2009 12:10:24 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Lesen einer Datei on Fri, 09 Oct 2009 12:23:53 GMT]]></title><description><![CDATA[<p>Dateien werden durch Lesen nicht beschädigt. Und selbst wenn man mal hypothetisch annimmt, dass sowas möglich wäre: Was glaubst du wohl, was beim Kopieren passiert? Da wird schließlich auch gelesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1790151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1790151</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 09 Oct 2009 12:23:53 GMT</pubDate></item></channel></rss>