wie könnte ich das kürzen????
-
hi leute wie könnte ich dass kürzen dass ich nich Das ganze Alphabet hin schreiben muss und dann einen mörder quellcode habe??????
// Laufwerk C: ULARGE_INTEGER TotalNumberOfFreeBytesC; ULARGE_INTEGER TotalNumberOfBytesC; GetDiskFreeSpaceEx("C:",NULL,&TotalNumberOfBytesC,&TotalNumberOfFreeBytesC); if((int)Int64ShrlMod32(TotalNumberOfFreeBytesC.QuadPart,20)>0) { char RootPathNameA[256]="c:\\"; // address of name of root directory GetVolumeInformation(RootPathNameA,VolumeNameBuffer,255, &VolumeSerialNumber,&MaximumComponentLength, &FileSystemFlags,FileSystemNameBuffer,255 ); DirPRO= (int)Int64ShrlMod32(TotalNumberOfBytesC.QuadPart,20)/100; DirFREIPRO=(int)Int64ShrlMod32(TotalNumberOfFreeBytesC.QuadPart,20)/DirPRO; sprintf(DirGESAMMT,"(Gesammt:) %iMB",Int64ShrlMod32(TotalNumberOfBytesC.QuadPart,20));// Gesammten speicher von C: in Readme.txt schreiben sprintf(DirFREI,"(Frei:) %iMB",Int64ShrlMod32(TotalNumberOfFreeBytesC.QuadPart,20));// Freien speicher von C: in Readme.txt schreiben out<<"\\n(C:) "<<VolumeNameBuffer<<" "<<DirGESAMMT<<" "<<DirFREI<<" -> "<<DirFREIPRO<<"% ("<<FileSystemNameBuffer<<") "; } else if((int)Int64ShrlMod32(TotalNumberOfFreeBytesC.QuadPart,20)<0){} else if((int)Int64ShrlMod32(TotalNumberOfFreeBytesC.QuadPart,20)==0) { out<<"\\n(C:) CD-Eingelegt"; } // Laufwerk D: ULARGE_INTEGER TotalNumberOfFreeBytesD; ULARGE_INTEGER TotalNumberOfBytesD; GetDiskFreeSpaceEx("D:",NULL,&TotalNumberOfBytesD,&TotalNumberOfFreeBytesD); if((int)Int64ShrlMod32(TotalNumberOfFreeBytesD.QuadPart,20)>0) { char RootPathNameA[256]="D:\\"; // address of name of root directory GetVolumeInformation(RootPathNameA,VolumeNameBuffer,255, &VolumeSerialNumber,&MaximumComponentLength, &FileSystemFlags,FileSystemNameBuffer,255 ); DirPRO= (int)Int64ShrlMod32(TotalNumberOfBytesD.QuadPart,20)/100; DirFREIPRO=(int)Int64ShrlMod32(TotalNumberOfFreeBytesD.QuadPart,20)/DirPRO; sprintf(DirGESAMMT,"(Gesammt:) %iMB",Int64ShrlMod32(TotalNumberOfBytesD.QuadPart,20));// Gesammten speicher von D: in Readme.txt schreiben sprintf(DirFREI,"(Frei:) %iMB",Int64ShrlMod32(TotalNumberOfFreeBytesD.QuadPart,20));// Freien speicher von D: in Readme.txt schreiben out<<"\\n(D:) "<<VolumeNameBuffer<<" "<<DirGESAMMT<<" "<<DirFREI<<" -> "<<DirFREIPRO<<"% ("<<FileSystemNameBuffer<<") "; } else if((int)Int64ShrlMod32(TotalNumberOfFreeBytesD.QuadPart,20)<0){} else if((int)Int64ShrlMod32(TotalNumberOfFreeBytesD.QuadPart,20)==0) { out<<"\\n(D:) CD-Eingelegt"; }
-
for(char drv='C';drv<='Z';++drv)
{
machdenrest(drv);
}
-
Gerade dsass is ja das problem denn wenn ich
for(char drv='A';drv<='Z';++drv) {
kann ich nicht die laufwerksbuchstaben durchlaufen lassen wie sieht das bitte aus?
Anhand dieses Beispiels bitte erklären:GetDiskFreeSpaceEx("D:",NULL,&TotalNumberOfBytesD,&TotalNumberOfFreeBytesD);
-
Anstatt
char RootPathNameA[256]="c:\\"; // address of name of root directory
nimm
char RootPathNameA[256]; sprintf(RootPathNameA, "%c:\\", drv);
-
warum geht das nich?????
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; char adr1[256]; //.. char adr2[256]; //.. sprintf(adr1,"%s:\\",drv);//.. sprintf(adr2,"%s:",drv); //.. GetDiskFreeSpaceEx(adr1,NULL,&TotalNumberOfBytes,&TotalNumberOfFreeBytes); //normal stünde hier statt adr1 - "C:\\" if((int)Int64ShrlMod32(TotalNumberOfFreeBytes.QuadPart,20)>0) { GetVolumeInformation(adr2,VolumeNameBuffer,255,[b]//normal stünde hier statt adr2 - "C:" &VolumeSerialNumber,&MaximumComponentLength, &FileSystemFlags,FileSystemNameBuffer,255 ); } else if((int)Int64ShrlMod32(TotalNumberOfFreeBytes.QuadPart,20)<0){} else if((int)Int64ShrlMod32(TotalNumberOfFreeBytes.QuadPart,20)==0) { } }
-
%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 restlichenBSP:
||||||||||||||||||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 FreiCODE:
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