Freier Speicherplatz ermitteln (getfree) [B+][B3D]
Übersicht
BlitzBasic
Codearchiv|
|
ozzi789Betreff: Freier Speicherplatz ermitteln (getfree) [B+][B3D] |
Antworten mit Zitat |
|---|---|---|
|
Mit diesem, mehr oder weniger schönen Workaround kann man den Speicherplatz eines Volumen auslesen.
Das Ganze erfolgt ohne DLL Ausgabe erfolgt als KB, diese kann man einfach umrechnen. Die Stringrechen funktionen sind von Noobdy, vielen Dank! Hier ein Anwendunsbeispiel: Code: [AUSKLAPPEN] frei#=getfree("C:\")
Print Int(frei)+" KBytes frei" Print Int(frei)/1024+" MByte frei" Print Float(frei#/1024/1024)+" GByte frei" Waitkey Function getfree(dir$) ExecFile ("cmd /C dir "+dir$+" > temp.dat") filepath$=curdir$+"temp.dat" Repeat temphandle=OpenFile(filepath$) Until temphandle>0 While Not Eof(temphandle) tmp$=ReadLine(temphandle) Wend pos=Instr(tmp$,"Byte",1) freevolumespace$=Left(tmp$,pos-2) freevolumespace$=Replace$(freevolumespace$,"'",",") pos2=Instr(freevolumespace$,",") For poscount=1 To 3 If Mid(freevolumespace$,pos2-poscount,1)<>" " tmpfreevolumespace$=Mid(freevolumespace,pos2+poscount-1,pos) EndIf Next freevolumespace$=Replace(tmpfreevolumespace$,",","") freevolumespacefloat=String_Divide$(freevolumespace$,"1024") CloseFile (temphandle) Delay(50) ;wird benötigt da bei langsameren PCs das File sonst nicht gelöscht werden kann! DeleteFile (filepath$) Return Int(freevolumespacefloat) End Function Const CHARLIMIT = 1024 ;Den Wert hier ändern für Zahlen mit mehr als 1024 Zeichen Function String_Add$( S1$, S2$ ) Local Char[ CHARLIMIT + 1 ] Sgn1 = String_Sgn( S1$ ) Sgn2 = String_Sgn( S2$ ) If Sgn1 = 1 And Sgn2 = -1 Then Return String_Substract( S1$, String_Abs$( S2$ ) ) If Sgn1 = -1 And Sgn2 = 1 Then Temp$ = String_Substract( String_Abs( S1$ ), S2$ ) If String_Sgn( Temp$ ) = -1 Then Return String_Abs( Temp$ ) Else Return "-" + Temp$ EndIf If Sgn1 = -1 And Sgn2 = -1 Then Return "-" + String_Add( String_Abs( S1$ ), String_Abs( S2$ ) ) If Len( S2$ ) > Len( S1$ ) Then Temp$ = S1$ S1$ = S2$ S2$ = Temp$ EndIf For i = 1 To Len( S1$ ) Char[ CHARLIMIT - Len( S1$ ) + i ] = Asc( Mid( S1$, i, 1 ) ) - 48 Next For i = Len( S2$ ) To 1 Step -1 Char[ CHARLIMIT - i + 1 ] = Char[ CHARLIMIT - i + 1 ] + ( Asc( Mid( S2$, Len( S2$ ) - i + 1, 1 ) ) - 48 ) Next Local Border = 0 For i = CHARLIMIT To 0 Step -1 If Char[ i ] <> 0 Then Border = i If Char[ i ] > 9 Then Char[ i - 1 ] = Char[ i - 1 ] + Floor( Char[ i ]/10. ) Char[ i ] = Char[ i ] Mod 10 EndIf Next Local Outstring$ = "" For i = CHARLIMIT To Border Step -1 Outstring$ = Chr( Char[ i ] + 48 ) + Outstring$ Next Return Outstring$ End Function Function String_Substract$( S1$, S2$ ) Local Char[ CHARLIMIT + 1 ] If S1$ = S2$ Then Return "0" Sgn1 = String_Sgn( S1$ ) Sgn2 = String_Sgn( S2$ ) If Sgn1 = 1 And Sgn2 = -1 Then Return String_Add( S1$, String_Abs$( S2$ ) ) If Sgn1 = -1 And Sgn2 = 1 Then Return "-" + String_Add( String_Abs( S1$ ), S2$ ) If Sgn1 = -1 And Sgn2 = -1 Then Temp$ = String_Substract( String_Abs( S1$ ), String_Abs( S2$ ) ) If String_Sgn( Temp$ ) = -1 Then Return String_Abs( Temp$ ) Else Return "-" + Temp$ EndIf For i = 1 To Len( S1$ ) Char[ CHARLIMIT - Len( S1$ ) + i ] = Asc( Mid( S1$, i, 1 ) ) - 48 Next For i = Len( S2$ ) To 1 Step -1 Char[ CHARLIMIT - i + 1 ] = Char[ CHARLIMIT - i + 1 ] - ( Asc( Mid( S2$, Len( S2$ ) - i + 1, 1 ) ) - 48 ) Next Local Border = 0 For i = CHARLIMIT To CHARLIMIT - Len( S1$ ) - Len( S2$ ) Step -1 If Char[ i ] < 0 Then Char[ i - 1 ] = Char[ i - 1 ] - Abs( Floor( Char[ i ]/10. ) ) Char[ i ] = ( 10 - ( Abs( Char[ i ] ) Mod 10 ) ) Mod 10 EndIf If Char[ i ] <> 0 Then Border = i Next Local Outstring$ = "" For i = CHARLIMIT To Border Step -1 Outstring$ = Chr( Char[ i ] + 48 ) + Outstring$ Next Return Outstring$ End Function Function String_Multiply$( S1$, S2$ ) Local Outstring$ = "0", Sign$ Sgn1 = String_Sgn( S1$ ) Sgn2 = String_Sgn( S2$ ) If Sgn1 = -1 Or Sgn2 = -1 Then If Sgn1 <> Sgn2 Then Sign$ = "-" S1$ = String_Abs( S1$ ) S2$ = String_Abs( S2$ ) EndIf If Len( S1$ ) < Len( S2$ ) Then Temp$ = S1$ S1$ = S2$ S2$ = Temp$ EndIf For i = Len( S2$ ) To 1 Step -1 Local PartString$ = "", Factor = Asc( Mid( S2$, i, 1 ) ) - 48 For t = 1 To Len( S1$ ) PartString$ = PartString$ + Chr( ( Asc( Mid( S1$, t, 1 ) ) - 48 )*Factor + 48 ) Next PartString$ = PartString$ + String( "0", Len( S2$ ) - i ) Outstring$ = String_Add( Outstring$, PartString$ ) Next Return Sign$ + Outstring$ End Function Function String_Divide$( S1$, S2$ ) Local PartString$, OutString$, Sign$ Sgn1 = String_Sgn( S1$ ) Sgn2 = String_Sgn( S2$ ) If Sgn1 = -1 Or Sgn2 = -1 Then If Sgn1 <> Sgn2 Then Sign$ = "-" S1$ = String_Abs( S1$ ) S2$ = String_Abs( S2$ ) EndIf PartString$ = Left( S1$, Len( S2$ ) ) S1$ = Right( S1$, Len( S1$ ) - Len( S2$ ) ) While Not String_Greater( S2$, PartString$ + S1$ ) Local Counter = 0 While Not String_Greater( S2$, PartString$ ) PartString$ = String_Substract( PartString$, S2$ ) Counter = Counter + 1 Wend If Counter > 0 Or OutString$ <> "" Then OutString$ = OutString$ + Counter If PartString$ = "0" Then PartString$ = "" PartString$ = PartString$ + Left( S1$, 1 ) If Len( S1$ ) > 1 Then S1$ = Right( S1$, Len( S1$ ) - 1 ) Else S1$ = "" Wend Return Sign$ + Outstring$ End Function Function String_Greater( S1$, S2$ ) Sgn1 = String_Sgn( S1$ ) Sgn2 = String_Sgn( S2$ ) If Sgn1 = -1 And Sgn2 = 1 Then Return False If Sgn1 = 1 And Sgn2 = -1 Then Return True If Sgn1 = -1 And Sgn2 = -1 Then Return String_Smaller( String_Abs( S1$ ), String_Abs( S2$ ) ) If Len( S1$ ) > Len( S2$ ) Then Return True If Len( S2$ ) > Len( S1$ ) Then Return False For i = 1 To Len( S1$ ) If Asc( Mid( S1$, i, 1 ) ) < Asc( Mid( S2$, i, 1 ) ) Then Return False If Asc( Mid( S1$, i, 1 ) ) > Asc( Mid( S2$, i, 1 ) ) Then Return True Next Return False End Function Function String_Smaller( S1$, S2$ ) Sgn1 = String_Sgn( S1$ ) Sgn2 = String_Sgn( S2$ ) If Sgn1 = -1 And Sgn2 = 1 Then Return True If Sgn1 = 1 And Sgn2 = -1 Then Return False If Sgn1 = -1 And Sgn2 = -1 Then Return String_Greater( String_Abs( S1$ ), String_Abs( S2$ ) ) If Len( S1$ ) < Len( S2$ ) Then Return True If Len( S2$ ) < Len( S1$ ) Then Return False For i = 1 To Len( S1$ ) If Asc( Mid( S1$, i, 1 ) ) > Asc( Mid( S2$, i, 1 ) ) Then Return False If Asc( Mid( S1$, i, 1 ) ) < Asc( Mid( S2$, i, 1 ) ) Then Return True Next Return False End Function Function String_Sgn( SourceString$ ) Select Left( SourceString$, 1 ) Case "-" Return -1 Case "0" Return 0 Default Return 1 End Select End Function Function String_Abs$( SourceString$ ) If Left( SourceString$, 1 ) = "-" Then Return Mid( SourceString$, 2 ) Else Return SourceString$ End Function Function String_Negate$( SourceString$ ) If String_Sgn( SourceString$ ) = -1 Then Return String_Abs( SourceString$ ) Return "-" + SourceString$ End Function mfg ozzi |
||
|
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
||
Übersicht
BlitzBasic
Codearchiv
Powered by phpBB © 2001 - 2006, phpBB Group
