<?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[Problem mit dem ifstream::open()]]></title><description><![CDATA[<p>Ich habe mit obenstehender Funktion ein kleines Problem. Ich habe eine Funktion an die ein char* übergeben wird der einen Dateinamen enthält. Wenn ich nun folgendes mit dem Ifstream anstelle geht das einwandfrei</p>
<pre><code class="language-cpp">char *pcFile;
ifstream file(pcFile);
</code></pre>
<p>wenn ich aber das hier machen will</p>
<pre><code class="language-cpp">char *pcFile;
ifstream file;
file.open(pcFile);
</code></pre>
<p>funktioniertd as absolut nicht da er mit stattd er char* die wchar_t* Version andrehen will, selbst ein (char*) vor dem zeiger bringt rein garnichts. Wie bekomme ich den compiler jetzt dazu mir die char* version zu geben statt der wchar_t* Version?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/234563/problem-mit-dem-ifstream-open</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 11:14:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/234563.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 19 Feb 2009 12:53:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 12:53:33 GMT]]></title><description><![CDATA[<p>Ich habe mit obenstehender Funktion ein kleines Problem. Ich habe eine Funktion an die ein char* übergeben wird der einen Dateinamen enthält. Wenn ich nun folgendes mit dem Ifstream anstelle geht das einwandfrei</p>
<pre><code class="language-cpp">char *pcFile;
ifstream file(pcFile);
</code></pre>
<p>wenn ich aber das hier machen will</p>
<pre><code class="language-cpp">char *pcFile;
ifstream file;
file.open(pcFile);
</code></pre>
<p>funktioniertd as absolut nicht da er mit stattd er char* die wchar_t* Version andrehen will, selbst ein (char*) vor dem zeiger bringt rein garnichts. Wie bekomme ich den compiler jetzt dazu mir die char* version zu geben statt der wchar_t* Version?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666386</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Thu, 19 Feb 2009 12:53:33 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 13:04:20 GMT]]></title><description><![CDATA[<p>So wie es da steht, versuchst Du sowohl hier...</p>
<pre><code class="language-cpp">char *pcFile;
ifstream file(pcFile);
</code></pre>
<p>...als auch hier...</p>
<pre><code class="language-cpp">char *pcFile;
ifstream file;
file.open(pcFile);
</code></pre>
<p>...mit einem unitialisierten Pointer (er zeigt auf irgendwas Zufälliges) einen Filestream zu öffnen. Das das nicht gut geht, ist wohl klar.</p>
<p>Xebov  schrieb:</p>
<blockquote>
<p>funktioniertd as absolut nicht da er mit stattd er char* die wchar_t* Version andrehen will, selbst ein (char*) vor dem zeiger bringt rein garnichts. Wie bekomme ich den compiler jetzt dazu mir die char* version zu geben statt der wchar_t* Version?</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Den Satz solltest Du vielleicht nochmal überarbeiten. Ansonsten wären konkrete Fehlermeldungen hilfreich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666387</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 19 Feb 2009 13:04:20 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 13:05:45 GMT]]></title><description><![CDATA[<p>Das ist ein gekürztes Beispiel (deswegen steht ja auch drüber Variante 1 funktioniert). Der char* enthält den Dateinamen, wenn ich ihn abfange mit dem Debugger ist er auch korrekt. Nur aus irgendeinem Grund wird wenn ich open verwende die wchar_t* Version statt der char* Version verwendet ich habe ka warum, aber wie bekomm ich ihn dazu die char* Version zu bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666393</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Thu, 19 Feb 2009 13:05:45 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 13:05:53 GMT]]></title><description><![CDATA[<p>Zeig mal die konkreten Fehlermeldungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666394</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666394</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 19 Feb 2009 13:05:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 13:19:00 GMT]]></title><description><![CDATA[<p>Gibt keine. Das Programm Compiliert korrekt stürzt aber ab. ich mache mal ein konkreteres Beispiel evtl wird dann eher klar was ich meine.</p>
<p>Nehmen wir mal an ich habe eine Datei die heist test.txt und befindet sich im Ordner der EXE. Nun habe ich einen char* pcFile. Der beinhaltet den namend er Datei also test.txt.</p>
<p>Wenn ich jetzt folgendes mache:</p>
<pre><code class="language-cpp">ifstream file(pcFile);
</code></pre>
<p>Funktioniert das einwandfrei die Datei wird geöffnet und ich kann damit arbeiten.</p>
<p>Wenn ich jedoch folgende variante nutze</p>
<pre><code class="language-cpp">ifstream file;
file.open(pcFile);
</code></pre>
<p>Funktioniert das nicht, der Compiler akzeptiert es zwar ohne probleme allerdings stürzt das Programm dann ab, der Debugger meldet dann eine Zugriffsverletzung, obwohl die Datei da ist und mit Variante 1 auch zu öffnen geht. Nun geht es darum was da genau los ist, wieso Variante 1 geht und Variante 2 nicht obwohl sie ja eigentlich das selbe tun solten.</p>
<p>So wie sich das darstellt scheint er die open version zu nehmen die einen wchar_t* mit dem Dateinamen erwartet statt die für char* und auch mit einem (char*) vor dem Zeiger bekomme ich nicht das gewünschte Ergebniss.</p>
<p>Hoffe die sache ist jetzt etwas verständlicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666403</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Thu, 19 Feb 2009 13:19:00 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 13:26:09 GMT]]></title><description><![CDATA[<p>Xebov schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Das kann eigentlich nicht sein. Entweder, der Compiler wählt das richtige open, oder es gibt eine Fehlermeldung (beim Compilen) aufgrund eines Typkonfliktes.<br />
Kann es sein, dass der String, auf den Dein char* zeigt nicht korrekt terminiert wird (nullzeichen)? Oder hast Du evtl. Umlaute im Dateinamen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666408</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 19 Feb 2009 13:26:09 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 13:29:49 GMT]]></title><description><![CDATA[<p>Nullterminierung ist bei dem String korrekt. Hab die terminierung eben manuell durchgeführt und es gab keine änderung. Hab auchmal versucht den dateinamen direkt anzugeben also &quot;test.txt&quot; das funktionierte bei Variante 1 einwandfrei bei variante 2 ging es nicht auhc nicht mit (char*)&quot;test.txt&quot;, ich finde das wirklich sehr merkwürdig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666413</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Thu, 19 Feb 2009 13:29:49 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 13:33:52 GMT]]></title><description><![CDATA[<p>Schmirgelt Dein Programm beim open ab, oder irgendwann später beim Schreiben?<br />
Probier außerdem mal den Dateinamen direkt beim open als Literal zu übergeben.<br />
Ich kann es mir eigentlich nicht vorstellen, dass bei einem Aufruf mit <code>char*</code> die <code>wchar_t*</code> -Variante aufgerufen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666414</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 19 Feb 2009 13:33:52 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 13:35:52 GMT]]></title><description><![CDATA[<p>Es schmiert direkt beim open ab.</p>
<pre><code class="language-cpp">ifstream file(&quot;test.txt&quot;);//funktioniert
------------------
ifstream file;
file.open(&quot;test.txt&quot;);//funktioniert nicht
-----------------
ifstream file;
file.open((char*)&quot;test.txt&quot;);//funktioniert ebenfalls nicht
</code></pre>
<p>Wenn ich Debugge sagt der Debugegr leider auch nciht viel nur bad ptr, wa smich sehr darauf schließen läst das er aus dem char* ein wchar_t* gemacht hat und der damit total veränderte dateiname ja nicht existiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666416</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Thu, 19 Feb 2009 13:35:52 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 13:40:42 GMT]]></title><description><![CDATA[<p>Kann es sein, dass vorher irgendwas kaputt geht, weil Du z.B. über Puffergrenzen hinausschreibst?</p>
<p>Benutzt Du evtl. einen Stream, der vorher schonmal benutzt wurde mehrmals? Also z.B. erst den Stream mit close schließen und dann wieder mit open öffnen?<br />
Wenn vor dem close irgendwas schiefgegangen ist, werden die Fehlerflags durch das close nicht wieder gelöscht. Also ggf. stream.clear() vor dem open aufrufen.</p>
<p>Hast Du vielleicht einen exotischen oder komischen Compiler am Werkeln?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666421</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 19 Feb 2009 13:40:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 13:44:57 GMT]]></title><description><![CDATA[<p>Der puffer des dateinamens hat noch mehr als genug Platz er ist sehr viel größer als der Inhalt.</p>
<p>Nein das Programm benutzt den stream nur einmal. Habe eben ein Profilaktisches clear() vor das open gepackt, das brachte nichts.</p>
<p>Ich nutze VC++2008 Express SP1.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666426</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Thu, 19 Feb 2009 13:44:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 13:47:54 GMT]]></title><description><![CDATA[<p>Ich meine nicht den Puffer des Filenamens selbst, sondern irgendwelche anderen Sachen, die Du vorher machst. Oder vielleicht auch Dinge, die irgendwelche externen libs vielleicht machen.<br />
Anders ist das eigentlich nicht zu erklären. Visual Studio 2008 SP1 verhält sich bei Übergabe eines char-Literals an fstream::open auf jeden Fall korrekt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666427</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 19 Feb 2009 13:47:54 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 13:56:33 GMT]]></title><description><![CDATA[<p>Es funktioniert jetzt, der ifstream war Member einer Klasse, die hat in ihrem Konstruktor zeroMemory() auf sich selbst gemacht hab den ifstream zur globalen Variable gemacht und nun geht open plötzlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666438</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Thu, 19 Feb 2009 13:56:33 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 13:57:38 GMT]]></title><description><![CDATA[<p>Xebov schrieb:</p>
<blockquote>
<p>der ifstream war Member einer Klasse, die hat in ihrem Konstruktor zeroMemory() auf sich selbst gemacht</p>
</blockquote>
<p>So was macht man ja auch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666439</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Thu, 19 Feb 2009 13:57:38 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 13:59:25 GMT]]></title><description><![CDATA[<p>Oh man... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666441</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 19 Feb 2009 13:59:25 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 14:02:53 GMT]]></title><description><![CDATA[<p>MFK schrieb:</p>
<blockquote>
<p>Xebov schrieb:</p>
<blockquote>
<p>der ifstream war Member einer Klasse, die hat in ihrem Konstruktor zeroMemory() auf sich selbst gemacht</p>
</blockquote>
<p>So was macht man ja auch nicht.</p>
</blockquote>
<p>Ich verstehe den Grund wieso ehrlich gesagt nicht, die Klasse soll alle ihre variablen mit dem Befehl leeren um Datenmüll vorzubeugen. ist aber gut zu wissen das der ifstream so empfindlich reagiert.</p>
<p>Aber danke für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666443</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Thu, 19 Feb 2009 14:02:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 14:05:59 GMT]]></title><description><![CDATA[<p>Xebov schrieb:</p>
<blockquote>
<p>Ich verstehe den Grund wieso ehrlich gesagt nicht, die Klasse soll alle ihre variablen mit dem Befehl leeren um Datenmüll vorzubeugen. ist aber gut zu wissen das der ifstream so empfindlich reagiert.</p>
</blockquote>
<p>Es geht nicht um ifstream. Das ist grundsätzlich eine Schnapsidee.</p>
<p>Du kannst nicht davon ausgehen, dass eine Klasse ordentlich initialisiert ist, wenn du ihre binäre Speicherrepräsentation komplett mit Nullen überbügelst. Mit hoher Wahrscheinlichkeit geht dabei eher etwas kaputt.</p>
<p>Damit zerlegst du dir übrigens auch den VTable-Zeiger bei polymorphen Klassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666447</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Thu, 19 Feb 2009 14:05:59 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 14:08:12 GMT]]></title><description><![CDATA[<p>Xebov schrieb:</p>
<blockquote>
<p>MFK schrieb:</p>
<blockquote>
<p>Xebov schrieb:</p>
<blockquote>
<p>der ifstream war Member einer Klasse, die hat in ihrem Konstruktor zeroMemory() auf sich selbst gemacht</p>
</blockquote>
<p>So was macht man ja auch nicht.</p>
</blockquote>
<p>Ich verstehe den Grund wieso ehrlich gesagt nicht, die Klasse soll alle ihre variablen mit dem Befehl leeren um Datenmüll vorzubeugen. ist aber gut zu wissen das der ifstream so empfindlich reagiert.</p>
<p>Aber danke für die Hilfe.</p>
</blockquote>
<p><em>Alle</em> Klassen, die interne Zustände halten, z.B. Pointer auf Heap-Objekte oder irgendwelche Stati reagieren &quot;empfindlich&quot; auf sowas.</p>
<p>Instanzen von Standard-Libarary-Klassen dürftest Du damit sicher ins Nirvana der undefinierten Zustände bomben.</p>
<p>Zum setzen von Klassen auf definierte Zustände gibt es Initialisiererlisten und ggf. den Rumpf der Konstruktoren. Aber ZeroMemory auf die Klasse anzuwenden ist mit Sicherheit eine schlchte Idee. Das kann man <em><strong>nur</strong></em> machen, wenn die Klasse ausschließlich POD-Typen enthält.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666449</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 19 Feb 2009 14:08:12 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 14:09:18 GMT]]></title><description><![CDATA[<p>Also kurz gesagt lieber ein paar Zeilen mehr tippen und die Variablen einzelln Nullen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666451</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Thu, 19 Feb 2009 14:09:18 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 14:14:48 GMT]]></title><description><![CDATA[<blockquote>
<p>zeroMemory()</p>
</blockquote>
<p>Damit machst du alles kaputt, was der Konstruktor anlegt, also auch die virtuelle Methodentabelle, interne Informationen, Metainformation. Keine gute Idee, nimm lieber Initialisierungslisten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666457</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 19 Feb 2009 14:14:48 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit dem ifstream::open() on Thu, 19 Feb 2009 19:51:27 GMT]]></title><description><![CDATA[<p>Xebov schrieb:</p>
<blockquote>
<p>Also kurz gesagt lieber ein paar Zeilen mehr tippen und die Variablen einzelln Nullen?</p>
</blockquote>
<p>Nicht nullen, sondern mit einem gültigen Wert initialisieren! Die Arbeitsweise mit <code>ZeroMemory()</code> oder <code>memset()</code> ist eher C und für die dortigen PODs angebracht. In C++ hat das meistens nichts zu suchen!</p>
<p>Irgendwelche undefinierten Laufzeitauswirkungen wegen Schreibfaulheit in Kauf zu nehmen hat sich zumindest selten bewährt. Nimm wie gesagt Initialisierungslisten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1666672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1666672</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 19 Feb 2009 19:51:27 GMT</pubDate></item></channel></rss>