<?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 beim ausgeben mit GetDiskFreeSpaceEx]]></title><description><![CDATA[<p>Hi....</p>
<p>ich wollte mir ein Programm schreiben das mir die Festplattengrösse ausgibt.<br />
Dazu hab ich hier vieles gefunden das ich verwenden konnte nur zeigt mir das Programm leider nicht den Gesamtspeicher an, bei freiem Speicher hindoch geht alles perfekt.</p>
<p>Mein Code bis jetzt:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;windows.h&gt;

int main(void)
   {    
    char VolumeNameBuffer[50];
    char FileSystemNameBuffer[20];
    char type[20];

    DWORD VolumeSerialNumber;
    DWORD MaximumComponentLength;
    DWORD FileSystemFlags;
    ULARGE_INTEGER TotalNumberOfFreeBytes;
    ULARGE_INTEGER TotalNumberOfBytes;

    for(char drive='A';drive&lt;='Z';++drive)
      {

       char drive1[10]; 

       sprintf(drive1,&quot;%c:\\&quot;,drive); 

       if (GetDriveType(drive1) == DRIVE_REMOVABLE)
	      {
          printf (&quot; %s Disketten- oder Wechseldatentraeger\n&quot;, drive1);
	      }
	    else if (GetDriveType(drive1) == DRIVE_CDROM)
         {
          printf (&quot; %s CD-Laufwerk\n&quot;, drive1);
         }
       else 
         {
          GetDiskFreeSpaceEx(drive1, NULL, &amp;TotalNumberOfBytes, &amp;TotalNumberOfFreeBytes);

	   if (GetDriveType(drive1) == DRIVE_UNKNOWN)
	      {
	      sprintf(type,&quot;%s (Unknown)&quot;, drive1);
               } 
            else if (GetDriveType(drive1) == DRIVE_RAMDISK) 
               {
                sprintf(type,&quot;%s (Ramdisk)&quot;, drive1);
               }
            else if (GetDriveType(drive1) == DRIVE_REMOTE)
               {
                sprintf(type,&quot;%s (Remote)&quot;, drive1);
               }
            else if (GetDriveType(drive1) == DRIVE_NO_ROOT_DIR)
               {
                sprintf(type,&quot;%s (Mount)&quot;, drive1);
               }
            else if (GetDriveType(drive1) == DRIVE_FIXED)
               {
                sprintf(type,&quot;%s (Festplatte)&quot;, drive1);
               }
            if (GetVolumeInformation(drive1, VolumeNameBuffer, 49, &amp;VolumeSerialNumber, &amp;MaximumComponentLength, &amp;FileSystemFlags, FileSystemNameBuffer, 19))
               {
                printf (&quot; %s %s %s Frei: %d MB von %d MB\n&quot;, type, VolumeNameBuffer, FileSystemNameBuffer, TotalNumberOfFreeBytes.QuadPart/1024/1024, TotalNumberOfBytes.QuadPart/1024/1024);
               }   
         }       
      }
    printf (&quot; &quot;);
   }
</code></pre>
<p>Wenn ich debuge und mir dann TotalNumberOfFreeBytes.QuadPart anschau, steht der richtige Wert drinnen nur bei der Ausgabe schreibt er dann wieder 0 hin !<br />
Warum macht er das und warum funktioniert das bei TotalNumberOfFreeBytes <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>Auch wollte ich fragen ob ich irgendwie prüfen kann wann ich was in meinem &quot;WECHSELDATENTRAEGER&quot; -laufwerk gesteckt hab und wann nicht wenn nämlich nix drinnen steckt und ich versuch mit GetDiskFreeSpaceEx die grösse zu bestimmten stop mein Programm und es kommt das &quot;Es befinden sich kein Datenträger in ..&quot; Fenster ?</p>
<p>Vielen Dank schon im voraus !</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/91403/problem-beim-ausgeben-mit-getdiskfreespaceex</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Apr 2026 08:32:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/91403.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 08 Nov 2004 12:37:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem beim ausgeben mit GetDiskFreeSpaceEx on Mon, 08 Nov 2004 12:37:28 GMT]]></title><description><![CDATA[<p>Hi....</p>
<p>ich wollte mir ein Programm schreiben das mir die Festplattengrösse ausgibt.<br />
Dazu hab ich hier vieles gefunden das ich verwenden konnte nur zeigt mir das Programm leider nicht den Gesamtspeicher an, bei freiem Speicher hindoch geht alles perfekt.</p>
<p>Mein Code bis jetzt:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;windows.h&gt;

int main(void)
   {    
    char VolumeNameBuffer[50];
    char FileSystemNameBuffer[20];
    char type[20];

    DWORD VolumeSerialNumber;
    DWORD MaximumComponentLength;
    DWORD FileSystemFlags;
    ULARGE_INTEGER TotalNumberOfFreeBytes;
    ULARGE_INTEGER TotalNumberOfBytes;

    for(char drive='A';drive&lt;='Z';++drive)
      {

       char drive1[10]; 

       sprintf(drive1,&quot;%c:\\&quot;,drive); 

       if (GetDriveType(drive1) == DRIVE_REMOVABLE)
	      {
          printf (&quot; %s Disketten- oder Wechseldatentraeger\n&quot;, drive1);
	      }
	    else if (GetDriveType(drive1) == DRIVE_CDROM)
         {
          printf (&quot; %s CD-Laufwerk\n&quot;, drive1);
         }
       else 
         {
          GetDiskFreeSpaceEx(drive1, NULL, &amp;TotalNumberOfBytes, &amp;TotalNumberOfFreeBytes);

	   if (GetDriveType(drive1) == DRIVE_UNKNOWN)
	      {
	      sprintf(type,&quot;%s (Unknown)&quot;, drive1);
               } 
            else if (GetDriveType(drive1) == DRIVE_RAMDISK) 
               {
                sprintf(type,&quot;%s (Ramdisk)&quot;, drive1);
               }
            else if (GetDriveType(drive1) == DRIVE_REMOTE)
               {
                sprintf(type,&quot;%s (Remote)&quot;, drive1);
               }
            else if (GetDriveType(drive1) == DRIVE_NO_ROOT_DIR)
               {
                sprintf(type,&quot;%s (Mount)&quot;, drive1);
               }
            else if (GetDriveType(drive1) == DRIVE_FIXED)
               {
                sprintf(type,&quot;%s (Festplatte)&quot;, drive1);
               }
            if (GetVolumeInformation(drive1, VolumeNameBuffer, 49, &amp;VolumeSerialNumber, &amp;MaximumComponentLength, &amp;FileSystemFlags, FileSystemNameBuffer, 19))
               {
                printf (&quot; %s %s %s Frei: %d MB von %d MB\n&quot;, type, VolumeNameBuffer, FileSystemNameBuffer, TotalNumberOfFreeBytes.QuadPart/1024/1024, TotalNumberOfBytes.QuadPart/1024/1024);
               }   
         }       
      }
    printf (&quot; &quot;);
   }
</code></pre>
<p>Wenn ich debuge und mir dann TotalNumberOfFreeBytes.QuadPart anschau, steht der richtige Wert drinnen nur bei der Ausgabe schreibt er dann wieder 0 hin !<br />
Warum macht er das und warum funktioniert das bei TotalNumberOfFreeBytes <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>Auch wollte ich fragen ob ich irgendwie prüfen kann wann ich was in meinem &quot;WECHSELDATENTRAEGER&quot; -laufwerk gesteckt hab und wann nicht wenn nämlich nix drinnen steckt und ich versuch mit GetDiskFreeSpaceEx die grösse zu bestimmten stop mein Programm und es kommt das &quot;Es befinden sich kein Datenträger in ..&quot; Fenster ?</p>
<p>Vielen Dank schon im voraus !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/647301</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/647301</guid><dc:creator><![CDATA[Tomjack]]></dc:creator><pubDate>Mon, 08 Nov 2004 12:37:28 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim ausgeben mit GetDiskFreeSpaceEx on Mon, 08 Nov 2004 16:28:05 GMT]]></title><description><![CDATA[<p>Was dir in deiner Sammlung noch fehlt, ist der</p>
<pre><code class="language-cpp">switch / case
</code></pre>
<p>Befehl <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Außerdem muss man nicht jedesmal GetDriveType() aufrufen.<br />
Stattdessen einmal in einer Var. speichern und die vergleichen.<br />
(Oder wie gesagt switch verwenden)</p>
<p>Zur Frage:<br />
Ich denke, printf soll eine Integer ausgeben (&quot;%d&quot;), diese ist hier wohl 32Bit groß (und mit vorzeichen).<br />
Du übergibst aber ein 64 Bit Integer, und diesen vorzeichenlos.</p>
<p>Also verwende TotalNumberOfFreeBytes.LowPart und ändere im printf auf (&quot;%u&quot;) um.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/647515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/647515</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 08 Nov 2004 16:28:05 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim ausgeben mit GetDiskFreeSpaceEx on Mon, 08 Nov 2004 16:50:11 GMT]]></title><description><![CDATA[<p>zu 2.) Willst du sowas: <a href="http://msdn.microsoft.com/library/en-us/devio/base/detecting_media_insertion_or_removal.asp" rel="nofollow">Detecting Media Insertion or Removal</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/647545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/647545</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Mon, 08 Nov 2004 16:50:11 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim ausgeben mit GetDiskFreeSpaceEx on Mon, 08 Nov 2004 17:39:21 GMT]]></title><description><![CDATA[<p>Thx SeppSchrot funktioniert<br />
auch dafür das du mich auf switch/case hingewiesen hast ich wusste das man das irgendwie schöner machen kann *g*</p>
<p>Der link schaut gut aus flenders DANKE dafür ich werde mich morgen damit beschäftigen.</p>
<p>mfg<br />
ToMjAcK</p>
]]></description><link>https://www.c-plusplus.net/forum/post/647588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/647588</guid><dc:creator><![CDATA[Tomjack]]></dc:creator><pubDate>Mon, 08 Nov 2004 17:39:21 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim ausgeben mit GetDiskFreeSpaceEx on Wed, 10 Nov 2004 10:40:11 GMT]]></title><description><![CDATA[<p>Ich hab das Problem jetzt anders gelöst:</p>
<pre><code class="language-cpp">printf (&quot; %s %s %s Frei(%d%%): %I64d MB || Gesamt: %I64d MB\n&quot;, type, VolumeNameBuffer, FileSystemNameBuffer, prozent, TotalNumberOfFreeBytes.QuadPart/1024/1024, TotalNumberOfBytes.QuadPart/1024/1024);
</code></pre>
<p>Leider hab ich eine (Remote) Festplatte im Rechner dessen Gesamtspeicher 48 MB betraeg und freier Speicher ca. 6 MB.<br />
Jedesmal wenn er zur der Festplatte kommt schreibt er in TotalNumberOfFreeBytes einen mir unerklärlich grossen Wert der nicht annähern stimmt rein?<br />
TotalNumberOfByte hingegen stimmt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/648640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/648640</guid><dc:creator><![CDATA[Tomjack]]></dc:creator><pubDate>Wed, 10 Nov 2004 10:40:11 GMT</pubDate></item></channel></rss>