<?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[Dateilänge grosser Dateien (&amp;gt; 5GB) in long long?]]></title><description><![CDATA[<p>Hallo liebes Forum,</p>
<p>nun habe ich für mein Problem stundenlang nach einer Lösung gesucht, finde aber keine <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> Hoffentlich wisst Ihr Rat.</p>
<p>Folgendes:</p>
<p>Ich moechte unter Windows XP ein Programm in C schreiben, das mir die Dateilaenge &quot;grosser&quot; (d.h. ab 5 GB) Dateien ausgibt; das Ganze unter Verwendung des C++ Builders, allerdings nur mit Standard-Bibliotheken. Mein C-Programm benutzt die &lt;sys/stat.h&gt; Bibliothek, in der die stat-Struktur einer Datei standardmäßig definiert ist. Meine &quot;Kernfunktion&quot; für das Auslesen der Dateilänge sieht so aus:</p>
<pre><code>#include &lt;sys/stat.h&gt;

[...]

off_t getSize (char *filename)
{
  struct stat statbuf;
  stat(filename, &amp;statbuf);
  return statbuf.st_size
}

[...]
</code></pre>
<p>Leider ist es so, daß der off_t Typ mit 4 Byte Länge festgelegt ist und folglich bei Dateien, die größer als ca. 2 GB sind, ein arithmetischer Überlauf stattfindet (z.B. negatives Ergebnis).</p>
<p>Nun suche ich nach einer Lösung, die Dateigröße in eine &quot;long long&quot;-Variable einzulesen. Ich bekomme es einfach nicht hin, denn irgendwie sind alle Rückgabe-Datentypen der Standardfunktionen auf maximal 4 Byte festgenagelt. Und unter Google war auch nichts Passendes zu finden.</p>
<p>Wünschenswert wäre eine Möglichkeit, die Dateilänge als &quot;long long&quot;-Variable direkt als Rückgabewert einer Funktion wie oben zu erhalten. Es darf ruhig etwas &quot;konstruiert&quot; sein, sollte aber die Standard-Bibliotheken nutzen, um portabel zu bleiben.</p>
<p>Für einen hilfreichen Tipp (Codebeispiel wäre super) wäre ich Euch wirklich dankbar.</p>
<p>Hoffentlich kann mir jemand hier helfen?! <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>Danke,</p>
<p>Flachkoepper</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/193718/dateilänge-grosser-dateien-gt-5gb-in-long-long</link><generator>RSS for Node</generator><lastBuildDate>Tue, 30 Jun 2026 13:08:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193718.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 28 Sep 2007 22:55:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dateilänge grosser Dateien (&amp;gt; 5GB) in long long? on Fri, 28 Sep 2007 22:55:01 GMT]]></title><description><![CDATA[<p>Hallo liebes Forum,</p>
<p>nun habe ich für mein Problem stundenlang nach einer Lösung gesucht, finde aber keine <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> Hoffentlich wisst Ihr Rat.</p>
<p>Folgendes:</p>
<p>Ich moechte unter Windows XP ein Programm in C schreiben, das mir die Dateilaenge &quot;grosser&quot; (d.h. ab 5 GB) Dateien ausgibt; das Ganze unter Verwendung des C++ Builders, allerdings nur mit Standard-Bibliotheken. Mein C-Programm benutzt die &lt;sys/stat.h&gt; Bibliothek, in der die stat-Struktur einer Datei standardmäßig definiert ist. Meine &quot;Kernfunktion&quot; für das Auslesen der Dateilänge sieht so aus:</p>
<pre><code>#include &lt;sys/stat.h&gt;

[...]

off_t getSize (char *filename)
{
  struct stat statbuf;
  stat(filename, &amp;statbuf);
  return statbuf.st_size
}

[...]
</code></pre>
<p>Leider ist es so, daß der off_t Typ mit 4 Byte Länge festgelegt ist und folglich bei Dateien, die größer als ca. 2 GB sind, ein arithmetischer Überlauf stattfindet (z.B. negatives Ergebnis).</p>
<p>Nun suche ich nach einer Lösung, die Dateigröße in eine &quot;long long&quot;-Variable einzulesen. Ich bekomme es einfach nicht hin, denn irgendwie sind alle Rückgabe-Datentypen der Standardfunktionen auf maximal 4 Byte festgenagelt. Und unter Google war auch nichts Passendes zu finden.</p>
<p>Wünschenswert wäre eine Möglichkeit, die Dateilänge als &quot;long long&quot;-Variable direkt als Rückgabewert einer Funktion wie oben zu erhalten. Es darf ruhig etwas &quot;konstruiert&quot; sein, sollte aber die Standard-Bibliotheken nutzen, um portabel zu bleiben.</p>
<p>Für einen hilfreichen Tipp (Codebeispiel wäre super) wäre ich Euch wirklich dankbar.</p>
<p>Hoffentlich kann mir jemand hier helfen?! <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>Danke,</p>
<p>Flachkoepper</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374687</guid><dc:creator><![CDATA[Flachkoepper]]></dc:creator><pubDate>Fri, 28 Sep 2007 22:55:01 GMT</pubDate></item><item><title><![CDATA[Reply to Dateilänge grosser Dateien (&amp;gt; 5GB) in long long? on Fri, 28 Sep 2007 23:36:59 GMT]]></title><description><![CDATA[<p>Flachkoepper schrieb:</p>
<blockquote>
<p>Ich moechte unter <strong>Windows XP ein Programm in C</strong> schreiben</p>
</blockquote>
<p>benutz doch WinAPI funktionen.<br />
--&gt; <a href="http://msdn2.microsoft.com/en-us/library/aa364957.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/aa364957.aspx</a><br />
<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>
]]></description><link>https://www.c-plusplus.net/forum/post/1374694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374694</guid><dc:creator><![CDATA[Apeman]]></dc:creator><pubDate>Fri, 28 Sep 2007 23:36:59 GMT</pubDate></item><item><title><![CDATA[Reply to Dateilänge grosser Dateien (&amp;gt; 5GB) in long long? on Sat, 29 Sep 2007 01:50:08 GMT]]></title><description><![CDATA[<p>Kannst ja mit dem Ueberlauf rechnen. Also wenn ein Ueberlauf bei 2^32 stattfinden, dann ist die richtige Groesse: 2^32 + ueberlaufGroesse. Muesstman halt nur wissen ob ein Ueberlauf stattgefunden hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374705</guid><dc:creator><![CDATA[DEvent]]></dc:creator><pubDate>Sat, 29 Sep 2007 01:50:08 GMT</pubDate></item><item><title><![CDATA[Reply to Dateilänge grosser Dateien (&amp;gt; 5GB) in long long? on Sat, 29 Sep 2007 05:26:32 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>wow, ich hätte nicht gedacht, dass jemand so schnell antwortet <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>Eine Variante mit Überlauf habe ich nun umgesetzt, um mein Programm auch unter Linux kompilieren zu koennen. Das klappt jetzt erstmal ganz gut.</p>
<p>Die WinAPI Funktionen habe ich mir erstmal auf meine Favouriten gelegt und werde sie zukuenftig unter Windows nutzen - Prima Sache <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>Ein großes Danke für Eure Tipps, Ihr habt mir damit sehr geholfen!</p>
<p>Viele Grüße,</p>
<p>Flachkoepper</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374711</guid><dc:creator><![CDATA[Flachkoepper]]></dc:creator><pubDate>Sat, 29 Sep 2007 05:26:32 GMT</pubDate></item><item><title><![CDATA[Reply to Dateilänge grosser Dateien (&amp;gt; 5GB) in long long? on Sat, 29 Sep 2007 09:26:05 GMT]]></title><description><![CDATA[<p>Nun habe ich doch noch eine Frage. Unter dem o.g. Link habe ich versucht, der Windows API zu entnehmen, wie das Auslesen der Dateilaenge funktionieren soll.</p>
<p>Folgendes Programm habe ich dazu erstellt (aus einem Kontext genommen, daher auf das Wesentliche beschraenkt):</p>
<pre><code>#include &lt;Windows.h&gt;
#include &lt;stdio.h&gt;

int main(int argc, char* argv[])
{
  /* Argument &quot;argv[1]&quot; = Dateiname per Parameter. */
  HANDLE fd = CreateFile(argv[1], READ_CONTROL, 0, NULL, OPEN_EXISTING,
                         FILE_FLAG_BACKUP_SEMANTICS, NULL);
  LARGE_INTEGER i;
  GetFileSizeEx(&amp;fd, &amp;i);

  printf(&quot;lower: %lu\n&quot;, i.LowPart);   /* long unsigned */
  printf(&quot;Upper: %li\n&quot;, i.HighPart);	 /* long signed */

  return EXIT_SUCCESS;
}
</code></pre>
<p>Problem: Ich erhalte, egal bei welcher Datei ich angebe, bei der printf-Ausgabe stets als &quot;LowPart&quot; eine 1, und als &quot;HighPart&quot; eine 256 <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Habe ich da jetzt etwas falsch verstanden?! Wo ist der Fehler, oder was kann ich mit diesen Werten anfangen? <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="😕"
    /></p>
<p>Für einen hilfreichen Tipp waere ich Euch super dankbar!</p>
<p>Flachkoepper <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1374739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374739</guid><dc:creator><![CDATA[Flachkoepper]]></dc:creator><pubDate>Sat, 29 Sep 2007 09:26:05 GMT</pubDate></item><item><title><![CDATA[Reply to Dateilänge grosser Dateien (&amp;gt; 5GB) in long long? on Sat, 29 Sep 2007 10:03:11 GMT]]></title><description><![CDATA[<p>GetFileSizeEx(&amp;fd, &amp;i);<br />
das da raus ^^<br />
und frag voher fd ab, darf nicht 0 oder -1 sein.<br />
<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>
]]></description><link>https://www.c-plusplus.net/forum/post/1374751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374751</guid><dc:creator><![CDATA[Apeman]]></dc:creator><pubDate>Sat, 29 Sep 2007 10:03:11 GMT</pubDate></item><item><title><![CDATA[Reply to Dateilänge grosser Dateien (&amp;gt; 5GB) in long long? on Sat, 29 Sep 2007 10:54:17 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-14811.html" rel="nofollow">Tim</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-10.html" rel="nofollow">ANSI C</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-4.html" rel="nofollow">WinAPI</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374770</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Sat, 29 Sep 2007 10:54:17 GMT</pubDate></item></channel></rss>