Freier Speicherplatz ermitteln (getfree) [B+][B3D]
Übersicht

![]() |
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


Powered by phpBB © 2001 - 2006, phpBB Group