Ordnergröße, es werden zu viele Ziffern angezeigt

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von eminem.

    Ordnergröße, es werden zu viele Ziffern angezeigt

    Hallo ich habe aus diesen Thread: [VB 2008] Ordnergröße + Unterordner + Files im Ordner ermitteln

    Beitrag von Beep, der Code ist richtig Klasse, nur mein einziges Problem ist, das die Ausgabe zu viele Ziffern hat,

    also: er sollte ca. 6,35 MB Zeigen, aber er zeigt: 6,35888671875 MB, und das ist ein wenig verwirrend, vorallen für die, die nicht wirklich sich damit beschäftigt haben :)
    kann man diese Zahlen so kürzen das nur 6,35 MB gezeigt werden?





    VB.NET-Quellcode

    1. Function GetIdealSi(ByVal bytes As Long) As String
    2. Select Case bytes
    3. Case Is > (1024.0 * 1024.0 * 1024.0 * 1024.0)
    4. Return CStr(bytes / 1024 / 1024 / 1024 / 1024) + "TB"
    5. Case Is > (1024.0 * 1024.0 * 1024.0)
    6. Return CStr(bytes / 1024 / 1024 / 1024) + "GB"
    7. Case Is > (1024.0 * 1024.0)
    8. Return CStr(bytes / 1024 / 1024) + "MB"
    9. Case Is > 1024.0
    10. Return CStr(bytes / 1024) + "KB"
    11. Case Is < 1024.0
    12. Return CStr(bytes) + "B"
    13. Case Else
    14. Return CStr(bytes) + "B"
    15. End Select
    16. End Function
    MFG
    LEON
    _______________________________________________
    Entweder man ist Teil der Lösung oder Teil des Problems.
    guck dir mal die String.Format funktion an(oder aber auch die Überladungen der .ToString Methode(bei den Zahlendatentypen, also statt CSTR(dieZahl), dieZahl.ToString...und natürlich die entsprechende Überladung), ich bin sicher du wirst fündig werden...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    jvbsl@ Sei dir nicht so sicher das ich alleine drauf komme :)

    Ich blicke jetzt nicht mehr durch^^
    MFG
    LEON
    _______________________________________________
    Entweder man ist Teil der Lösung oder Teil des Problems.
    hmm, wie wäres mit ein Fertiges Beispiel^^ :thumbsup:
    MFG
    LEON
    _______________________________________________
    Entweder man ist Teil der Lösung oder Teil des Problems.
    Na das war auch ein Joke, aber ich weiß immernoch nicht wie ihr das meint...
    MFG
    LEON
    _______________________________________________
    Entweder man ist Teil der Lösung oder Teil des Problems.
    Na du musst die Gleitkommazahl 'umwandeln', bzw. so runden, dass nur eine gewisse Anzahl Kommastellen angezeigt wird.

    VB.NET-Quellcode

    1. Dim zahl As Double = 3.14159265
    2. MessageBox.Show(CStr(Math.Round(zahl, 2)))

    Gibt "3.14" aus ;)



    Gruss
    Pascal
    Okay habt recht, jetzt klingelt es bei mir, hätte ich auch selber drauf kommen können, muss mich unbedingt mal damit richtig beschäftigen :)


    Ich Danke Euch allen, für die Schnelle Hilfe :)
    MFG
    LEON
    _______________________________________________
    Entweder man ist Teil der Lösung oder Teil des Problems.
    Eine frage hätte ich noch, wie kann man als Beispiel ein geschützten Bereich abfragen:

    Das Habe ich zum Ausführen:

    VB.NET-Quellcode

    1. TextBox1.Text = GetIdealSi(GetFolderSize("C:\Windows"))
    MFG
    LEON
    _______________________________________________
    Entweder man ist Teil der Lösung oder Teil des Problems.
    Das ist der ganze Code:


    VB.NET-Quellcode

    1. Function GetFolderSize(ByVal path As String) As Long
    2. GetSize(path)
    3. Return si
    4. End Function
    5. Dim si As Long = 0
    6. Sub GetSize(ByVal path As String)
    7. Try
    8. Dim di As New IO.DirectoryInfo(path)
    9. For Each file As IO.FileInfo In di.GetFiles
    10. si += file.Length
    11. Next
    12. For Each dire As IO.DirectoryInfo In di.GetDirectories
    13. GetSize(dire.FullName)
    14. Next
    15. Catch ex As Exception
    16. MessageBox.Show(ex.Message)
    17. End Try
    18. End Sub
    19. Function GetIdealSi(ByVal bytes As Long) As String
    20. Select Case bytes
    21. Case Is > (1024.0 * 1024.0 * 1024.0 * 1024.0)
    22. Return String.Format("{0:0.00} TB", bytes / 1024 / 1024 / 1024 / 1024)
    23. Case Is > (1024.0 * 1024.0 * 1024.0)
    24. 'Return CStr(bytes / 1024 / 1024 / 1024) + " GB"
    25. Return String.Format("{0:0.00} GB", bytes / 1024 / 1024 / 1024)
    26. Case Is > (1024.0 * 1024.0)
    27. Return String.Format("{0:0.00} MB", bytes / 1024 / 1024)
    28. Case Is > 1024.0
    29. Return String.Format("{0:0.00} KB", bytes / 1024)
    30. Case Is < 1024.0
    31. Return CStr(bytes) + " B"
    32. Case Else
    33. Return CStr(bytes) + " B"
    34. End Select
    35. End Function
    36. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    37. TextBox1.Text = GetIdealSi(GetFolderSize("C:\Windows"))
    38. End Sub



    Wenn ich die Größe des Windows Ordner abfragen will, sagt er mir das der Zugriff verweigert ist, und bringt mir nicht die richtige größe,
    trots Admin Rechte.
    MFG
    LEON
    _______________________________________________
    Entweder man ist Teil der Lösung oder Teil des Problems.
    Nun ja.. Es muss ja jede Datei in jedem Subdirectory geprüft werden (Auch versteckte-/System-Dateien).
    Hast du in den Ordneroptionen evtl. eingestellt, dass versteckte Dateien und Systemdateien ausgeblendet werden?
    Evtl. ist das das Problem...


    Gruss
    Pascal

    PascalN schrieb:

    Hast du in den Ordneroptionen evtl. eingestellt
    Das hat erstmal garnichts mit dem Programm zutun. Die Ordneroptionen sind nur für den Explorer.

    Es kann dara liegen, dass manche Ordner unter Windows 7 (vllt. auch Vista) auch für einen Administrator gesperrt sind. Diese Ordner sind meistens gar keine echten Ordner, sondern "linken" auf einen richtigen Ordner. Z.B.: (Win7) C:\Dokumente und Einstellungen\ verweist auf C:\Users\ . Das gleiche gilt auch bei C:\Documents and Settings\ . Diese Verweise sind für ältere Programme gedacht, die nicht an Windows 7 angepasst sind und feste Pfadangaben benutzen.

    lg SeriTools
    | Keine Fragen per PN oder Skype.
    Danke an euch, klinkt logisch.
    MFG
    LEON
    _______________________________________________
    Entweder man ist Teil der Lösung oder Teil des Problems.