wie könnte ich das kürzen????



  • %c nicht %s !!!



  • Funz trotzdem noch nich jetzt gibts mir total falsche werte aus denn die variablen übernehmen einen wert und wenn es das laufwerk nicht gibt behalten sie einfach den wert des vorherigen laufwerks wie krieg ich das in den griff?



  • if(GetDiskFreeSpaceEx(...))
    {
    // Laufwerk existiert
    }
    else
    {
    // Laufwerk existiert nicht
    }
    


  • ich glaub hier gibts ein missverständniss:

    1. ich überprüf obdie laufwerke vorhanden sind
    2. es schreibt mir ab dem 3ten laufwerk immer das selbe fürdie restlichen

    BSP:
    ||||||||||||||||||C|||| <- komische zeichen
    😨 2500MB Frei <- Hier funz
    E: 3500MB Frei <- Hier funz
    F: 3000MB Frei <- doch hier schreibts immer das selbe ob wohl es das Laufwerk gar nich mehr gibt

    ....
    Y: 3000MB Frei
    Z: 3000MB Frei

    CODE:

    for(char drv='A';drv<='Z';++drv) {
    
    		//frür NTFS oder FAT bestimmung anfang
    		char VolumeNameBuffer[256];            // address of name of the volume
    		DWORD VolumeSerialNumber;              // address of volume serial number
    		DWORD MaximumComponentLength;          // address of system's maximum filename length
    		DWORD FileSystemFlags;                 // address of file system flags
    		char FileSystemNameBuffer[256];        // address of name of file system
    		UINT OldErrMode;
    		OldErrMode=SetErrorMode(SEM_FAILCRITICALERRORS);
    		//frür NTFS oder FAT bestimmung ende
    
    		// INITIALISIERUNGE FÜR GESAMMTSPEICHER + FREIER SPEICHER
    		char DirGESAMMT[500];
    		char DirFREI[500];
    		int DirFREIPRO;
    		int DirPRO;
    
    		ULARGE_INTEGER TotalNumberOfFreeBytes; 
    		ULARGE_INTEGER TotalNumberOfBytes;
    
    		TotalNumberOfFreeBytes; 
    		TotalNumberOfBytes;
    
    		char adr1[3];
    		char adr2[3];
    
    		sprintf(adr1,"%c:\\",drv);
    		sprintf(adr2,"%c:",drv);
    
    		GetDiskFreeSpaceEx(adr1,NULL,&TotalNumberOfBytes,&TotalNumberOfFreeBytes);
    
    		if((int)Int64ShrlMod32(TotalNumberOfFreeBytes.QuadPart,20)>0)
    		{
    		GetVolumeInformation(adr2,VolumeNameBuffer,255,
                               &VolumeSerialNumber,&MaximumComponentLength,
                               &FileSystemFlags,FileSystemNameBuffer,255 );
    
    		DirPRO=	(int)Int64ShrlMod32(TotalNumberOfBytes.QuadPart,20)/100;
    		DirFREIPRO=(int)Int64ShrlMod32(TotalNumberOfFreeBytes.QuadPart,20)/DirPRO;
    
    		sprintf(DirGESAMMT,"(Gesammt:) %iMB",Int64ShrlMod32(TotalNumberOfBytes.QuadPart,20));// Gesammten speicher von C: in Readme.txt schreiben
    
    		sprintf(DirFREI,"(Frei:) %iMB",Int64ShrlMod32(TotalNumberOfFreeBytes.QuadPart,20));// Freien speicher von C: in Readme.txt schreiben
    
    		cout<<"\\n("<<drv<<":) "<<VolumeNameBuffer<<" "<<DirGESAMMT<<" "<<DirFREI<<" -> "<<DirFREIPRO<<"% ("<<FileSystemNameBuffer<<") \n";
    
    		}
    		else if((int)Int64ShrlMod32(TotalNumberOfFreeBytes.QuadPart,20)<0){}
    		else if((int)Int64ShrlMod32(TotalNumberOfFreeBytes.QuadPart,20)==0)
    		{
    		cout<<"\\n("<<drv<<":) CD-Eingelegt\n";
    		}
    
        }
    


  • In dem Teil, den du eben geschrieben hast, kann ich keine Prüfung erkennen.
    Du musst bei jedem Schleifendurchlauf prüfen, ob das Laufwerk existiert, sonst wird die Schleife für alle Laufwerke von A bis Z durchlaufen.
    Wenn ein Laufwerk nicht existiert, liefert GetDiskFreeSpaceEx einen Fehler, und die Daten werden nicht verändert. Da du hier aber gar nichts prüfst, werden die (unveränderten) Daten weiterhin ausgegeben für alle Laufwerke.



  • if(GetDiskFreeSpaceEx(adr1,NULL,&TotalNumberOfBytes,&TotalNumberOfFreeBytes)==NULL){}
    hab ich jetzt eingebaut trotzdem gibt es mir noch so komische zeichen zwischen den laufwerken an ,doch wie kann ich das prob beseitigen wennichden buffer kleiner mache kannes mir die datenträgererweiterung nich mehr anzeigen 😞
    und erstma danke mit dem tipp wegen der überprüfung das funz jetzt



  • Nein, es reicht nicht, es sei denn, du setzt vorher alle Werte auf definierte, ungültige Werte, so dass du später feststellen kannst, dass die Werte nicht von GetDiskFreeSpaceEx verändert wurden, und es sich anscheinend nicht um ein Laufwerk handelt.
    Aber wozu so umständlich? Das hab ich doch vorhin geschrieben!

    if(GetDiskFreeSpaceEx(...))
    {
    // Laufwerk existiert, Werte wurden gesetzt, Daten ausgeben
    }
    else
    {
    // Laufwerk existiert nicht, ignorieren
    }
    

    Wenn's das Laufwerk gibt, dann zeige dessen Informationen an, wenn nicht, dann ignoriere es einfach und mache nichts!
    Du kannst auch GetDriveType verwenden, um die Art des Laufwerks rauszufinden.
    /Edit: Mist, zu schnell 😉



  • da gibts nu ein klitze kleines problem :

    wenn ich so mache wie du es mir geschrieben hast

    if(GetDiskFreeSpaceEx(adr1,NULL,&TotalNumberOfBytes,&TotalNumberOfFreeBytes))
    

    steht auf meinem bildschirm:

    Die zeichen sind narlich gekürtzt sonst würde dass nicht ins board passen
    (E:) (Gesammt:) 30004MB (Frei:) 26862MB -> 89% (ÌÌÌÌÌÌEÌÌÌ”ÐF) 
    (G:) (Gesammt:) 117239MB (Frei:) 41248MB -> 35% (ÌÌÌÌÌÌGÌÌÌ”ÐF)
    (H:) (Gesammt:) 117239MB (Frei:) 41248MB -> 35% (ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌHÌÌÌ”ÐF)
    (I:) (Gesammt:) 117239MB (Frei:) 41248MB -> 35% (ÌÌÌÌÌÌÌÌÌÌÌÌÌIÌÌÌ”ÐF)
    ...
    (X:) (Gesammt:) 117239MB (Frei:) 41248MB -> 35% (ÌÌÌ”ÐF)
    (Y:) (Gesammt:) 117239MB (Frei:) 41248MB -> 35% (ÌÌÌÌÌÌYÌÌÌ”ÐF)
    (Z:) (Gesammt:) 117239MB (Frei:) 41248MB -> 35% (ÌÌÌÌÌÌÌÌZÌÌÌ”ÐF)
    

    mach ichs so:

    if(GetDiskFreeSpaceEx(adr1,NULL,&TotalNumberOfBytes,&TotalNumberOfFreeBytes) == NULL)
    

    steht auf meinem bildschirm:

    (C:) (Gesammt:) 8142MB (Frei:) 3375MB -> 41% (ÌÌÌÌÌÌCÌÌÌ”ÐF)
    (D:) (Gesammt:) 30004MB (Frei:) 26862MB -> 89% (NTFS)
    (F:) (Gesammt:) 117239MB (Frei:) 41248MB -> 35% (NTFS)
    

    und das würde sogarstimmen wenn die blöden zeichen nicht da wären!!



  • Das ist nun allerdings recht seltsam, denn

    http://msdn.microsoft.com/library/en-us/fileio/base/getdiskfreespaceex.asp schrieb:

    Return Values

    If the function succeeds, the return value is nonzero.

    If the function fails, the return value is zero. To get extended error information, call GetLastError.

    Das, was du beschreibst, ist genau das Gegenteil 😕
    Und bei der Abfrage der anderen Informationen solltest Du auch eine Fehlerabfrage einbauen, wer weiß, ob diese komischen Strings überhaupt von einer Funktion stammen...



  • ne schon klar mein fehler hab falsch aus meinem qc rauskopiert da geht noch ein stück ab

    if(GetDiskFreeSpaceEx(adr1,NULL,&TotalNumberOfBytes,&TotalNumberOfFreeBytes) == NULL)
    		{
    		}
    
    		else
    		{
                      //FUNZ 
                      }
    

    (edit) NE Passt schon durch die zeite prüfung funz THX


Anmelden zum Antworten