Sprache: VB
Mit dieser einfachen Function lässt sich ganz einfach bestimmen, welche Größe eine Datei hat.
Man bekommt nicht wenn man z.B FileLen aufruft eine große Anzahl Bytes, mit der keiner was anfangen kann.
Dim kb As Integer = 1024
Dim mb As Integer = kb * 1024
Dim gb As Integer = mb * 1024
Private Function GetSizeType(ByVal size As Integer) As String
If size < kb Then
Dim newSize As Integer = size
Return newSize & " Bytes".ToString()
ElseIf size < mb Then
Dim newSize As Integer = size / kb
Return newSize & " KB".ToString()
ElseIf size < gb Then
Dim newSize As Integer = size / mb
Return newSize & " MB".ToString()
ElseIf size >= gb Then
Dim newSize As Integer = size / gb
Return newSize & " GB".ToString()
Else
Return Nothing
End If
End Function
Dim kb As Integer = 1024
Dim mb As Integer = kb * 1024
Dim gb As Integer = mb * 1024
Private Function GetSizeType(ByVal size As Integer) As String
If size < kb Then
Dim newSize As Integer = size
Return newSize & " Bytes".ToString()
ElseIf size < mb Then
Dim newSize As Integer = size / kb
Return newSize & " KB".ToString()
ElseIf size < gb Then
Dim newSize As Integer = size / mb
Return newSize & " MB".ToString()
ElseIf size >= gb Then
Dim newSize As Integer = size / gb
Return newSize & " GB".ToString()
Else
Return Nothing
End If
End Function
Alte URL:
/snippet/groesse-einer-datei-ermitteln/15156
Ein paar Gedanken zum Snippet:
1. Ein Long entgegen zu nehmen wäre sinnvoller, da Integer auf lediglich <2GB (nach deiner Berechnung) beschränkt ist.
2. Ich hätte vermutlich auch noch TB eingebaut, schließlich sind Festplatten in der Größenordnung mittlerweile normal.
3. Das Return Nothing am Ende ist unnötig sofern du (wie ich es auch empfehlen würde) statt dem letzten ElseIf ein einfaches Else nimmst. Denn dort interessiert die Prüfung ja nicht mehr.
4. Wenn man unter 1024 Bytes übergibt kommt 0 heraus...was falsch ist
5. Wenn du SI Präfixe benutzt solltest du auch deren Umrechnungsfaktoren nutzen. Ansonsten eben IEC und 1024. Wann auch immer Microsoft das mal ordentlich macht...
6. Das ToString bringt nichts, da du es auf dem String aufrufst. Und der &-Operator ruft sowieso implizit für alles ToString auf wenn der 2. Operand ein String ist.
7. Man könnte den Algorithmus auch etwas generischer gestalten. Wie viel das bringt ist allerdings fraglich.
Ich persönlich war mit diesem snippet ganz zufrieden:
https://dotnet-snippets.de/snippet/byte-groessenangaben-als-string-formatieren-kb-mb-gb/1304
@Martin
So etwas in der Art stellte ich mir vor 🙂
Nur 5. wird wohl ewig ein Problemchen sein…