<?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[Datei Kopieren über filestreams]]></title><description><![CDATA[<p>Hi,</p>
<p>also ich versuche gerade eine datei zu kopieren, denn später will ich dann dieses verfahren dazu nutzen eine datei zu verschiken &amp; zu empfangen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>also ich habs ma so probiert.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;windows.h&gt;
using namespace std; 

int main() 
{
  char str[500];

  ifstream in(&quot;alt.zip&quot; , ifstream::binary);
  if(!in) { 
    cout &lt;&lt; &quot;Cannot open file.\n&quot;; 
    return 1; 
  }
  ofstream out(&quot;neu.zip&quot; , ifstream::binary); 
  if(!out) { 
    cout &lt;&lt; &quot;Cannot open file.\n&quot;; 
    return 1;
  }
  in.seekg (0, ios::end);
  int length = in.tellg();
  in.seekg (0, ios::beg);

  for ( int i = 0; i &lt; ((int)length/500); i++){
  in.read(str,500);
  out.write(str,500);
  out.seekp(i*500,ios_base::beg);
  in.seekg(i*500,ios_base::beg);
  }
  if ( (length%500) != 0 ){
  int Size = length%500;
  char * Buff = new char[Size];
  in.read(Buff,Size);
  out.write(Buff,Size);
  delete[] Buff;
  }

  in.close();
  return 0;
}
</code></pre>
<p>aber wenn ich das ganze jetzt z.B. an einer .zip datei ausprobiere meldet sich das entsprechende entpack programm das es einen fehler gab.<br />
Kann mir da jemand bitte helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/223627/datei-kopieren-über-filestreams</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 18:26:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/223627.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 28 Sep 2008 20:43:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datei Kopieren über filestreams on Sun, 28 Sep 2008 20:45:44 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>also ich versuche gerade eine datei zu kopieren, denn später will ich dann dieses verfahren dazu nutzen eine datei zu verschiken &amp; zu empfangen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>also ich habs ma so probiert.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;windows.h&gt;
using namespace std; 

int main() 
{
  char str[500];

  ifstream in(&quot;alt.zip&quot; , ifstream::binary);
  if(!in) { 
    cout &lt;&lt; &quot;Cannot open file.\n&quot;; 
    return 1; 
  }
  ofstream out(&quot;neu.zip&quot; , ifstream::binary); 
  if(!out) { 
    cout &lt;&lt; &quot;Cannot open file.\n&quot;; 
    return 1;
  }
  in.seekg (0, ios::end);
  int length = in.tellg();
  in.seekg (0, ios::beg);

  for ( int i = 0; i &lt; ((int)length/500); i++){
  in.read(str,500);
  out.write(str,500);
  out.seekp(i*500,ios_base::beg);
  in.seekg(i*500,ios_base::beg);
  }
  if ( (length%500) != 0 ){
  int Size = length%500;
  char * Buff = new char[Size];
  in.read(Buff,Size);
  out.write(Buff,Size);
  delete[] Buff;
  }

  in.close();
  return 0;
}
</code></pre>
<p>aber wenn ich das ganze jetzt z.B. an einer .zip datei ausprobiere meldet sich das entsprechende entpack programm das es einen fehler gab.<br />
Kann mir da jemand bitte helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1589888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1589888</guid><dc:creator><![CDATA[Schurke]]></dc:creator><pubDate>Sun, 28 Sep 2008 20:45:44 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Kopieren über filestreams on Sun, 28 Sep 2008 21:02:40 GMT]]></title><description><![CDATA[<p>Diese beiden Zeilen sind falsch und unnötig:</p>
<pre><code class="language-cpp">out.seekp(i*500,ios_base::beg); 
in.seekg(i*500,ios_base::beg);
</code></pre>
<p>Die Zeiger werden intern automatisch mitgeschoben, da musst du nichts selber schieben. Wobei du sogar hier falsch schiebst.</p>
<p>Im übrigen noch ein paar Dinge:</p>
<pre><code class="language-cpp">((int)length/500)
</code></pre>
<p>length ist doch schon ein int und 500 ist ein int, daher musst du nicht casten. Zudem ist das ein C-Cast, in C++ verwendet man den folgenden cast für sowas:</p>
<pre><code class="language-cpp">static_cast&lt;int&gt;(...)
</code></pre>
<p>Das ist zwar glaub ich erlaubt, trotzdem würde ich eher ofstream verwenden, statt ifstream:</p>
<pre><code class="language-cpp">ofstream out(&quot;neu.zip&quot; , ifstream::binary);
</code></pre>
<p>Oder am besten gleich <code>std::ios_base::binary</code></p>
<p>Im übrigen würde ich persönlich auch die Schleife etwas umgestalten. Wenn du schon auf Heap-Speicher verzichten willst und nur über Stackspeicher die Sache verschieben willst, mach es doch eher so:</p>
<pre><code class="language-cpp">char str[4096]; // Bisschen grösserer Buffer schadet nichts.

in.seekg(0, ios::end);
std::streampos length = in.tellg(); // Lieber std::streampos verwenden.
in.seekg(0, ios::beg);

std::streamsize bytesRead = 0;

while(length &gt; 0 &amp;&amp; in.read(str, 4096))
{
  bytesRead = in.gcount(); // Wieviel wurde gelesen?

  out.write(str, bytesRead);

  length -= bytesRead;
}

if(!in)
{
  // Fehler ist passiert.
}
else
{
  in.close();
}

// usw.
</code></pre>
<p>C++-Referenz: <a href="http://www.cplusplus.com/reference/" rel="nofollow">http://www.cplusplus.com/reference/</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1589902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1589902</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 28 Sep 2008 21:02:40 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Kopieren über filestreams on Sun, 28 Sep 2008 21:20:33 GMT]]></title><description><![CDATA[<p>Danke für die antwort OO</p>
<p>Ohne das mtischieben bringt mir dieser code...</p>
<pre><code class="language-cpp">in.seekg (0, ios::end);
  int length = in.tellg();
  in.seekg (0, ios::beg);

  for ( int i = 0; i &lt; ((int)length/500); i++){
  in.read(str,500);
  out.write(str,500);
  }
  if ( (length%500) != 0 ){
  int Size = length%500;
  char * Buff = new char[Size];
  in.read(Buff,Size);
  out.write(Buff,Size);
  delete[] Buff;
  }

  in.close();
  return 0;
</code></pre>
<p>ein fehlerfreies ergebniss..</p>
<p>warum deiner es nicht tut ( bei ner knapp 10mb großen datei ) versteh ich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1589910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1589910</guid><dc:creator><![CDATA[Schurke]]></dc:creator><pubDate>Sun, 28 Sep 2008 21:20:33 GMT</pubDate></item></channel></rss>