<?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[Binary File spliten]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich bin im Begriff ein Programm zu schreiben in dem es unbedingt notwendig ist Dateien zu spliten.<br />
Ich benutze GnuCompiler(gcc) unter Windows und unter Linux.<br />
Unter Linux läuft das programm, aber unter Windows gibt es 2 Probleme:</p>
<ol>
<li>es werden meistens zwischen 100 und 1000 Zeichen gelesen und dann ist finito</li>
<li>wenn ich den buffer auf 3MB (SIZE = 3000000) setzte stürzt das Programm ab. Im gegensatz zu einem Buffer von 1000 Zeichen wo dann aber trotzdem eben nur der Anfang der Datei gelesen wird.</li>
</ol>
<p>Mein Code sieht vorläufig so aus:</p>
<pre><code>#include &lt;string.h&gt;
#include &lt;stdio.h&gt;
#include &lt;io.h&gt;
#include &lt;sys/stat.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;stdio.h&gt;
#include &lt;windows.h&gt;
#define SIZE 3000000

int read_write();

int main(int argc, char *argv[])
{
  printf(&quot;%d ZEICHEN geschrieben!\n&quot;,read_write());
  system(&quot;PAUSE&quot;);
}

int read_write()
{
  int f1,f2;
  char buf[SIZE];
  char filename[MAX_PATH];
  int sum,len,i,j;

  f1=open(&quot;a.out&quot;,O_RDONLY);        //oeffne Quellfile (f1)

  i=0;
  sum=0;

  do{
    strcpy(filename,&quot;testfile.txt&quot;); // filename +a (beim 2ten mal b, usw.)
    for(j=0;filename[j]!='\0';j++);  //...
    filename[j]='a'+i;               //...
    filename[++j]='\0';              //...

    f2=creat(filename,S_IWRITE);     // erstelle neus File (f2)

    len=read(f1,buf,SIZE);           //lese SIZE = 3 000 000 Zeichen,
    write(f2,buf,len);               //schreibe sie

    sum+=len;
    i++;
  }while(len==SIZE);

  close(f1);
  close(f2);
  return sum;                        //giebt summe der insgesammt 
                                     //geschrieben zeichen zurueck
}
</code></pre>
<p>Ich habe keine Ahnung woran das liegt.<br />
Bitte um Hilfe.<br />
Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/176912/binary-file-spliten</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Jul 2026 19:41:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/176912.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 26 Mar 2007 10:49:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Binary File spliten on Mon, 26 Mar 2007 10:49:43 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich bin im Begriff ein Programm zu schreiben in dem es unbedingt notwendig ist Dateien zu spliten.<br />
Ich benutze GnuCompiler(gcc) unter Windows und unter Linux.<br />
Unter Linux läuft das programm, aber unter Windows gibt es 2 Probleme:</p>
<ol>
<li>es werden meistens zwischen 100 und 1000 Zeichen gelesen und dann ist finito</li>
<li>wenn ich den buffer auf 3MB (SIZE = 3000000) setzte stürzt das Programm ab. Im gegensatz zu einem Buffer von 1000 Zeichen wo dann aber trotzdem eben nur der Anfang der Datei gelesen wird.</li>
</ol>
<p>Mein Code sieht vorläufig so aus:</p>
<pre><code>#include &lt;string.h&gt;
#include &lt;stdio.h&gt;
#include &lt;io.h&gt;
#include &lt;sys/stat.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;stdio.h&gt;
#include &lt;windows.h&gt;
#define SIZE 3000000

int read_write();

int main(int argc, char *argv[])
{
  printf(&quot;%d ZEICHEN geschrieben!\n&quot;,read_write());
  system(&quot;PAUSE&quot;);
}

int read_write()
{
  int f1,f2;
  char buf[SIZE];
  char filename[MAX_PATH];
  int sum,len,i,j;

  f1=open(&quot;a.out&quot;,O_RDONLY);        //oeffne Quellfile (f1)

  i=0;
  sum=0;

  do{
    strcpy(filename,&quot;testfile.txt&quot;); // filename +a (beim 2ten mal b, usw.)
    for(j=0;filename[j]!='\0';j++);  //...
    filename[j]='a'+i;               //...
    filename[++j]='\0';              //...

    f2=creat(filename,S_IWRITE);     // erstelle neus File (f2)

    len=read(f1,buf,SIZE);           //lese SIZE = 3 000 000 Zeichen,
    write(f2,buf,len);               //schreibe sie

    sum+=len;
    i++;
  }while(len==SIZE);

  close(f1);
  close(f2);
  return sum;                        //giebt summe der insgesammt 
                                     //geschrieben zeichen zurueck
}
</code></pre>
<p>Ich habe keine Ahnung woran das liegt.<br />
Bitte um Hilfe.<br />
Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1252809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1252809</guid><dc:creator><![CDATA[DerMitDemSpeerSteht]]></dc:creator><pubDate>Mon, 26 Mar 2007 10:49:43 GMT</pubDate></item><item><title><![CDATA[Reply to Binary File spliten on Mon, 26 Mar 2007 11:23:10 GMT]]></title><description><![CDATA[<p>Der Stack hat eine voreingestellte begrenzte Größe. Default=1MB.<br />
Es ist nicht sonderlich gescheit<br />
1. den Puffer in der Größe auf dem Stack anzulegen, verwende malloc/new<br />
2. Alles in einem Rutsch zu lesen. Bau Dir einfach eine Schleife die kleinere Segmente liest.<br />
3. nicht _O_BINARY zu setzen, wenn es sich um binäre Daten handelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1252847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1252847</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 26 Mar 2007 11:23:10 GMT</pubDate></item></channel></rss>