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

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

ozzi789

Betreff: Freier Speicherplatz ermitteln (getfree) [B+][B3D]

BeitragFr, Mai 07, 2010 10:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit diesem, mehr oder weniger schönen Workaround kann man den Speicherplatz eines Volumen auslesen.
Das Ganze erfolgt ohne DLL Wink
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

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group