Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1563 | Anzahl registrierter User: 1896 | Besucher online: 247
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Create Nice File Size


Autor: dognose
Sprache: VB.NET
Bewertung:
6.41 (4 votes)
Anzahl der Aufrufe: 7523
  
Kick it on dotnet-kicks.de  

Beschreibung:

Sometimes you need to display a "nice file size" - values like 14865343435 Bytes are absolut useless for Userfriendly Interfaces...

Here are 3 possible Functions doing their job ;-)




Abgelegt unter: FileSize, Size Calculator, Größen rechner, byte.



Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
'Variant one (original)
'call with MakeNiceSize(YourSizeInBytes, "0")
Public suffix() As String = {"B", "KB", "MB", "GB", "TB", "PB", "EB"}
Function MakeNiceSize(ByVal size As Double, ByVal run As Integer)
        Dim ReturnedString As String = ""

        If size >= 1024 Then
            ReturnedString = MakeNiceSize(size / 1024, run + 1)
        Else
            ReturnedString = Math.Round(size, 2).ToString("00.00") & " " & suffix(run)
        End If

        Return ReturnedString
    End Function

'Variante 2 (using loop)
    'call with MakeNiceSize(YourSizeInBytes)
    Function MakeNiceSize(ByVal size As Double)
        Dim suffix() As String = {"B", "KB", "MB", "GB", "TB", "PB", "EB"}
        Dim run As Integer = 0

        While size >= 1024
            size /= 1024
            run += 1
        End While

        Return Math.Round(size, 2).ToString("00.00") & " " & suffix(run)
    End Function

'variante 3 (possibility to "choose" size)
'modes are: "auto" (chooses best),"B","KB","MB","GB","TB","PB","EB"
'for auto simple use MakeNiceSize(YourSizeInBytes)
'for MB simple use MakeNiceSize(YourSizeInBytes,"MB")
'returns false if any error occured
Function MakeNiceSize(ByVal size As Double, optional ByVal mode As String = "auto")
        Dim suffix() As String = {"B", "KB", "MB", "GB", "TB", "PB", "EB"}
        Dim run As Integer = 0

        If mode = "auto" Then
            While size >= 1024
                size = size / 1024
                run = run + 1
            End While
            Return Math.Round(size, 2).ToString("00.00") & " " & suffix(run)
        ElseIf mode <> "auto" Then
            If suffix.Contains(mode) Then
                While suffix(run) <> mode
                    size = size / 1024
                    run = run + 1
                End While
            Else
                Return False
            End If
            Return Math.Round(size, 2).ToString("00.00") & " " & suffix(run)
        End If

        Return False
    End Function
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

General Bison schrieb am:  01.07.2008 13:06:44

Der HAMER! Ich hab dafür auch was gemacht, aber mit einer mehr schlecht als recht select case.....
ECHT GENIAL

Thats HEAVY! I have made something for that too, but with an more bad than right select case...
REALLY GENIUS
dirkb schrieb am:  05.07.2008 20:25:36

kleiner Vorschlag: die size als Long, da das Framework auch ein Long zurückgibt und statt rekursiv vielleicht eine Schleife

    
Public Function MakeNiceSize(ByVal size As Long) As String
Dim suffix() As String = {"B", "KB", "MB", "GB", "TB", "PB", "EB"}
Dim run As Integer = 0
Dim fdSize As Double = size
Do While (fdSize >= 1024)
fdSize /= 1024
run += 1
Loop
Return fdSize.ToString("0.00") & " " & suffix(run)
End Function
dognose schrieb am:  08.11.2008 00:33:03

@dirkb

Danke für deinen Vorschlag, aber gegen "Rekursion" ist nichts einzuwenden.

Long fällt in meinem fall weg, denn:

step 1: 564845235 bytes
step 2: 564845235 / 1024 = 551606,6748046875 (Du siehst, ein "long" würde fehler machen), daher fiel meine entscheidung auf double.

@General: So ein Feedback hört man gerne, thx! :-D

dognose
Rainer Hilmer schrieb am:  09.11.2008 13:02:37

Die Schleifenvariante finde ich auch besser, sorry. Meine Begründung: Es ist nicht best practice weil der Nutzer dieser Methode beim Aufruf die Rekursionsstufe mit angeben muß. Diese wird aber nur für interne Zwecke gebraucht. Was nur intern gebraucht wird, sollte nach aussen hin versteckt werden.
dognose schrieb am:  09.11.2008 14:46:04

Ja, das ist wohl der "Beste" Grund es anders zu machen. Natürlich
könnte ich die stufe als "optional=0" definieren (dann wäre der Vorteil wiederrum, dass man nicht zwangsweise nur "B" als Startstufe hat.

Habe das CodeSnippet mal "erweitert"

danke für eure Hinweise.


schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.