Hilfe: Festplattenspeicher in Progressbar anzeigen

  • VB.NET

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von Xenon.

    Hilfe: Festplattenspeicher in Progressbar anzeigen

    Hallo zusammen, ich brauche hilfe.
    Ich möchte gerne durch eine Progressbar meinen Speicher auf den Festplatten anzeigen lassen.
    z.B:
    Progressbar1 = Festplattenspeicher C
    Progressbar2 = Festplattenspeicher D
    Progressbar3 = Festplattenspeicher E

    TextBox1 = 130,6/160,0GB.
    TextBox1 = 30,5/80,0 GB.
    TextBox1 = 56,6/80,0 GB.

    Die Progressbar's sollen nach dem öffnen des programmes angezeigt werden und die TextBoxen nach klicken des Buttons.
    Die Progressbar soll quasie anzeigen wieviel schon belegt ist, geht das?
    Kennt jemand den code und/oder hilft mir weiter...

    Ich hab auch mal ein bild geladen wie es aussehen soll.


    Danke schonmal :)
    Bilder
    • bsp.jpg

      17,55 kB, 320×287, 320 mal angesehen

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Try
    3. Dim freesize As Long = Int(My.Computer.FileSystem.GetDriveInfo(TextBox1.Text).TotalFreeSpace)
    4. Dim maxsize As Long = Int(My.Computer.FileSystem.GetDriveInfo(TextBox1.Text).TotalSize)
    5. Label1.Text = "Volumenname: " + My.Computer.FileSystem.GetDriveInfo(TextBox1.Text).VolumeLabel.ToString
    6. Label3.Text = "Datensystem: " + My.Computer.FileSystem.GetDriveInfo(TextBox1.Text).DriveFormat
    7. Label5.Text = Math.Round(maxsize / 1024 / 1024 / 1024, 2).ToString & " GB"
    8. Label2.Text = Math.Round(freesize / 1024 / 1024 / 1024, 2).ToString & " GB"
    9. ProgressBar1.Maximum = My.Computer.FileSystem.GetDriveInfo(TextBox1.Text).TotalSize / 1024 / 1024 / 1024
    10. ProgressBar1.Value = My.Computer.FileSystem.GetDriveInfo(TextBox1.Text).TotalFreeSpace / 1024 / 1024 / 1024
    11. Catch ex As Exception
    12. MsgBox(ex.Message)
    13. End Try
    14. End Sub



    Ist ein wenig durcheinander deswegen hier noch ein Screenshot:


    @Xenon
    Du solltest Option Strict On und Explezit On immer einschalten. Du vermeidest damit mögliche fehlerquellen.
    Verketten sollten man mit "&".
    Das einlesen eines Wert, sollte nur einmal gemacht werden. Das schont die perfomance !
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On ' die beiden Funktionen sollten eingeschaltet sein,
    2. Option Explicit On ' dadurch werden von vorneherein Fehler unterbunden
    3. Public Class Form1
    4. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    5. Try
    6. ' Das System nicht unnötig belasten, also alle Informationen nur einmal einlesen.
    7. Dim Drive As String = TextBox1.Text
    8. Dim freesize As Long = Int(My.Computer.FileSystem.GetDriveInfo(Drive).TotalFreeSpace)
    9. Dim maxsize As Long = Int(My.Computer.FileSystem.GetDriveInfo(Drive).TotalSize)
    10. ' hier brauchst du einen String nicht nochmal mit .toString wandeln
    11. Label1.Text = "Volumenname: " & My.Computer.FileSystem.GetDriveInfo(Drive).VolumeLabel ' Verkettung also &
    12. Label3.Text = "Datensystem: " & My.Computer.FileSystem.GetDriveInfo(Drive).DriveFormat ' Verkettung also &
    13. Label5.Text = CStr(Math.Round(maxsize / 1024 / 1024 / 1024, 2) & " GB")
    14. Label2.Text = CStr(Math.Round(freesize / 1024 / 1024 / 1024, 2) & " GB")
    15. ProgressBar1.Maximum = CInt(maxsize / 1024 / 1024 / 1024) ' ProgressBar arbeitet mit Integer
    16. ProgressBar1.Value = CInt(freesize / 1024 / 1024 / 1024) ' ProgressBar arbeitet mit Integer
    17. Catch ex As Exception
    18. MsgBox(ex.Message)
    19. End Try
    20. End Sub
    21. End Class

    ChaosBernd schrieb:

    Verketten sollten man mit "&".

    Habe ich früher immer gemacht, aber dann fand ich das mit "+" wesentlich einfacher ^^
    Aber Ok, dann werd ich halt in zukunft wieder mit "&" arbeiten.
    super! Vielen Dank!
    das hat mir sehr weiter geholfen :)
    ich hab das an mein programm angepasst und es geht auch super. Nur musste das etwas abändern z.B. die progressbar soll den bisher belegten Speicher anzeigen,das klappt ja jetz durch die

    VB.NET-Quellcode

    1. Dim platte1 = My.Computer.FileSystem.GetDriveInfo(TextBox15.Text).TotalSize
    2. Dim platte2 = My.Computer.FileSystem.GetDriveInfo(TextBox15.Text).TotalFreeSpace
    3. Dim platte3 = platte1 - platte2

    und jetz geht die Error Nachricht nichtmehr und der Volumenname wird bei mir nicht angezeigt.

    hier mal der code:

    VB.NET-Quellcode

    1. .
    2. .
    3. .
    4. Dim freesize As Long = Int(My.Computer.FileSystem.GetDriveInfo(TextBox15.Text).TotalFreeSpace)
    5. Dim maxsize As Long = Int(My.Computer.FileSystem.GetDriveInfo(TextBox15.Text).TotalSize)
    6. TextBox19.Text = My.Computer.FileSystem.GetDriveInfo(TextBox15.Text).VolumeLabel
    7. TextBox18.Text = My.Computer.FileSystem.GetDriveInfo(TextBox15.Text).DriveFormat
    8. TextBox16.Text = Math.Round(maxsize / 1024 / 1024 / 1024, 2).ToString & " GB"
    9. TextBox17.Text = Math.Round(freesize / 1024 / 1024 / 1024, 2).ToString & " GB"
    10. Dim platte1 = My.Computer.FileSystem.GetDriveInfo(TextBox15.Text).TotalSize
    11. Dim platte2 = My.Computer.FileSystem.GetDriveInfo(TextBox15.Text).TotalFreeSpace
    12. Dim platte3 = platte1 - platte2
    13. TextBox20.Text = Math.Round(platte3 / 1024 / 1024 / 1024, 2).ToString & " GB"
    14. ProgressBar7.Maximum = My.Computer.FileSystem.GetDriveInfo(TextBox15.Text).TotalSize / 1024 / 1024 / 1024
    15. ProgressBar7.Value = platte3 / 1024 / 1024 / 1024
    16. On Error GoTo ErrHandler
    17. .
    18. .
    19. .


    Jetz würde ich noch gerne ein "Label35" einbauen welches eine % anzeige der bisherverbrauchten Speicherkapazität anzeigt. Oder kann ich das auch in die Progressbar irgendwie anzeigen lassen?
    Weil bei mir ist immer der hintergrund von dem "..%" = Schwarz und nicht durchsichtig.



    Dankeschön im voraus. :thumbsup:
    Bilder
    • hdd.jpg

      19,27 kB, 419×264, 256 mal angesehen

    Asek schrieb:

    und der Volumenname wird bei mir nicht angezeigt

    schau mal nach ob die TextBox auch die richtige ist !?
    vieleicht hat das Laufwerk keinen VolumeName !?

    Asek schrieb:

    Schwarz und nicht durchsichtig

    schau dir bei dem Panel / Form in den Eigenschaften ob dort vieleicht BackColor Black eingestellt ist,
    es kännte auch mit TranparencyKey zusammen hängen ! schau beide Werte mal an.
    ich hab da mal noch eine andere andere frage.
    wie kann ich den mit einem button erst auslesen welche festplatten ich habe, die dann in eine "ListBox1" eingetragen werden.
    Und ich mit der "ListBox1" die abfrage von Speichervolumen über diese Festplatte steuere.
    -Nicht wie ich es jetz mache "(TextBox15.Text)"!
    So wie im bild dargestellt soll es sein. ;)



    das auslesen, da hab ich den code:

    VB.NET-Quellcode

    1. For Each mydrive As IO.DriveInfo In IO.DriveInfo.GetDrives
    2. Dim listitem As String = mydrive.Name & " (" & mydrive.VolumeLabel & ", "
    3. Select Case mydrive.DriveType
    4. Case IO.DriveType.CDRom
    5. listitem &= "CD"
    6. Case IO.DriveType.Fixed
    7. listitem &= "Fixed"
    8. Case IO.DriveType.Network
    9. listitem &= "Netzwerk"
    10. Case IO.DriveType.Removable
    11. listitem &= "Externes Peripheriegerät"
    12. Case Else
    13. listitem &= "Unlesbar"
    14. End Select
    15. listitem &= ")"
    16. ListBox1.Items.Add(listitem)
    17. Next


    und die anzeige mit den Speicherdaten den code:

    VB.NET-Quellcode

    1. 'Festplattenspeicher'
    2. If TextBox15.Text = "" Then
    3. ErrorProvider1.SetError(TextBox15, "Bitte geben sie einen richtigen Festplattenpfad an!")
    4. MsgBox("Bitte geben sie einen richtigen Festplattenpfad an!")
    5. Else
    6. ErrorProvider1.Clear()
    7. Dim freesize As Long = Int(My.Computer.FileSystem.GetDriveInfo(TextBox15.Text).TotalFreeSpace)
    8. Dim maxsize As Long = Int(My.Computer.FileSystem.GetDriveInfo(TextBox15.Text).TotalSize)
    9. TextBox19.Text = My.Computer.FileSystem.GetDriveInfo(TextBox15.Text).VolumeLabel
    10. TextBox18.Text = My.Computer.FileSystem.GetDriveInfo(TextBox15.Text).DriveFormat
    11. TextBox16.Text = Math.Round(maxsize / 1024 / 1024 / 1024, 2).ToString & " GB"
    12. TextBox17.Text = Math.Round(freesize / 1024 / 1024 / 1024, 2).ToString & " GB"
    13. Dim platte1 = My.Computer.FileSystem.GetDriveInfo(TextBox15.Text).TotalSize
    14. Dim platte2 = My.Computer.FileSystem.GetDriveInfo(TextBox15.Text).TotalFreeSpace
    15. Dim platte3 = platte1 - platte2
    16. TextBox20.Text = Math.Round(platte3 / 1024 / 1024 / 1024, 2).ToString & " GB"
    17. ProgressBar7.Maximum = My.Computer.FileSystem.GetDriveInfo(TextBox15.Text).TotalSize / 1024 / 1024 / 1024
    18. ProgressBar7.Value = platte3 / 1024 / 1024 / 1024
    19. End If
    20. 'Festplattenspeicher ENDE'


    ich bekomm das einfach nich hin das das über ne ListBox laufen soll. ?(
    Wäre echt super wenn mir das jemand umschreiben könnte...

    Mfg Asek
    kleine korrektur:
    wenn das Laufwerk nicht bereit ist gibt es probleme.
    Also soltest du nur die Laufwerke die auch verfügbar sind anzeigen.
    Dazu schreibst du dir eine Routine die das in deine ListBox füllt
    und dann in der ListBox.SelectedIdexChanged den geünschten eintrag wählen.....
    Spoiler anzeigen

    VB.NET-Quellcode

    1. For Each drive As IO.DriveInfo In IO.DriveInfo.GetDrives
    2. If drive.IsReady Then ' erst prüfen ob das Laufwerk ansprechbar ist
    3. ListBox1.Items.Add(drive.Name)
    4. ListBox1.Items.Add(drive.TotalSize) ' nur als Beispiel
    5. End If
    6. Next
    Naja mein Code sah etwas anders aus, aber ich dachte das mit dem Ready wäre nicht so wichtig ^^

    VB.NET-Quellcode

    1. Dim ready As Boolean
    2. For i = 1 To My.Computer.FileSystem.Drives.Count
    3. ready = My.Computer.FileSystem.GetDriveInfo(My.Computer.FileSystem.Drives.Item(i).ToString).IsReady.ToString
    4. If ready = True Then
    5. Listbox1.Items.Add((My.Computer.FileSystem.Drives.Item(i).ToString).ToString)
    6. End If
    7. Next


    So wollte ich es eigendlich erst schreiben.

    ChaosBernd schrieb:

    wenn du oben eine Variable dreklarierst dann musst du ihr in der schleife auch etwas zuweisen.

    ?? habe ich doch

    VB.NET-Quellcode

    1. ready = My.Computer.FileSystem.GetDriveInfo(My.Computer.FileSystem.Drives.Item(i).ToString).IsReady.ToString


    EDIT:

    Ich würde eine anstatt einer Listbox eine Combobox nehmen!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Xenon“ ()

    wenn du oben eine Boolean deklarierst, kannst du unten keine Stringzuweisung machen

    VB.NET-Quellcode

    1. Dim ready As Boolean

    VB.NET-Quellcode

    1. ready = My.Computer.FileSystem.GetDriveInfo(My.Computer.FileSystem.Drives.Item(i).ToString).IsReady.ToString


    oder was soll das tosting ?

    sorry ist aber so

    außerdem warum eine Variable, wenn der Befehl doch schon da ist.

    VB.NET-Quellcode

    1. If drive.IsReady Then
    hmm irgendwie hat das teilweise nich ganz funktioniert.
    Ich habs dann einfach so gemacht:


    VB.NET-Quellcode

    1. 'Festplatten erkennung'
    2. ComboBox1.Items.Clear()
    3. For Each mydrive As IO.DriveInfo In IO.DriveInfo.GetDrives
    4. Dim listitem As String = mydrive.Name
    5. Dim platte As String = (mydrive.DriveType)
    6. Select Case mydrive.DriveType
    7. Case IO.DriveType.Fixed
    8. listitem &= ""
    9. Case IO.DriveType.Removable
    10. listitem &= " Diskettenlaufwerk!"
    11. Case Else
    12. listitem &= " CD/DVD - Laufwerk!"
    13. End Select
    14. ComboBox1.Items.Add(listitem)
    15. Next
    16. 'Festplatten erkennung ENDE'
    17. 'Festplattenspeicher'
    18. If ComboBox1.Text = "" Then
    19. ErrorProvider1.SetError(ComboBox1, "Bitte geben sie einen richtigen Festplattenpfad an!")
    20. MsgBox("Bitte geben sie einen richtigen Festplattenpfad an!")
    21. Else
    22. ErrorProvider1.Clear()
    23. Dim freesize As Long = Int(My.Computer.FileSystem.GetDriveInfo(ComboBox1.Text).TotalFreeSpace)
    24. Dim maxsize As Long = Int(My.Computer.FileSystem.GetDriveInfo(ComboBox1.Text).TotalSize)
    25. TextBox19.Text = My.Computer.FileSystem.GetDriveInfo(ComboBox1.Text).VolumeLabel
    26. TextBox18.Text = My.Computer.FileSystem.GetDriveInfo(ComboBox1.Text).DriveFormat
    27. TextBox16.Text = Math.Round(maxsize / 1024 / 1024 / 1024, 2).ToString & " GB"
    28. TextBox17.Text = Math.Round(freesize / 1024 / 1024 / 1024, 2).ToString & " GB"
    29. Dim platte1 = My.Computer.FileSystem.GetDriveInfo(ComboBox1.Text).TotalSize
    30. Dim platte2 = My.Computer.FileSystem.GetDriveInfo(ComboBox1.Text).TotalFreeSpace
    31. Dim platte3 = platte1 - platte2
    32. TextBox20.Text = Math.Round(platte3 / 1024 / 1024 / 1024, 2).ToString & " GB"
    33. ProgressBar7.Maximum = My.Computer.FileSystem.GetDriveInfo(ComboBox1.Text).TotalSize / 1024 / 1024 / 1024
    34. ProgressBar7.Value = platte3 / 1024 / 1024 / 1024
    35. End If
    36. 'Festplattenspeicher ENDE'


    So checked er erst welche speichergeräte da sind und listet sie dann in eine ComboBox.
    Von der aus mann dann die daten auslesen kann.