Unerklährlicher Fehler

  • VB.NET

Es gibt 31 Antworten in diesem Thema. Der letzte Beitrag () ist von Myrax.

    Unerklährlicher Fehler

    Hallo Liebe Com.,
    Ich bin gerade echt am verzweifeln und zwar versuche ich die Festplatten und andere Computer Komponenten auszulesen, ich habe weil ich schon lange auf der Fehlersuche bin eine Try schleife eingesetzt und der Fehler der dabei zu tage kam war dieser

    Quellcode

    1. Ungültige Konvertierung von der Zeichenfolge Festplatte in Typ Integer

    Hier mal mein Code ( Bis zur relevanten stelle )

    VB.NET-Quellcode

    1. Imports System.Management.Instrumentation
    2. Imports System.Management
    3. Imports System.IO
    4. Public Class Form1
    5. Dim Rams As Double
    6. Dim Rames As String
    7. Dim CPUS As String
    8. Dim Greka As String
    9. Dim Grekas As String
    10. Dim Greekas As String
    11. [...]
    12. Try
    13. 'Festplatte
    14. For Each mydrive As IO.DriveInfo In IO.DriveInfo.GetDrives
    15. Dim Listinfo As String = "Gesammter Speicher : " & (mydrive.TotalSize / 1024 / 1024 / 1024).ToString("N") & " GB, " & "Verfügbarer Speicher : " & (mydrive.TotalFreeSpace / 1024 / 1024 / 1024).ToString("N") & " GB "
    16. Dim listitem As String = mydrive.Name & " (" & mydrive.VolumeLabel & ", "
    17. Select Case mydrive.DriveType
    18. Case IO.DriveType.CDRom
    19. listitem &= "CD / DVD"
    20. Case IO.DriveType.Fixed
    21. listitem &= "Feste Größe"
    22. Case IO.DriveType.Network
    23. listitem &= "Netzwerk"
    24. Case IO.DriveType.Removable
    25. listitem &= "Externes Peripheriegerät"
    26. Case Else
    27. listitem &= "Unlesbar"
    28. End Select
    29. listitem &= ")"
    30. ListBox1.Items.Add(listitem & Listinfo)
    31. Next
    32. Catch ex As Exception
    33. MsgBox(ErrorToString, "Festplatte")
    34. End Try


    Kann mir jemand helfen ?
    Ich verstehe diesen Fehler nicht und weiß nicht wo ich suchen soll....

    LG

    EDIT:

    Das merkwürdige daran ist , wenn ich einen Code darüber lege wird der ausgeführt liegt er darunter wird er es nicht, was dazu kommt ist das meine Festplatten angezeigt werden... ?(

    Code-Fresser schrieb:

    Ich verstehe diesen Fehler nicht

    Ein Integer ist eine Ganzzahl. Ist "Festplatte" eine Zahl? Nein. Also wird sie auch nie ein Integer sein können. Das sagt der Fehler.
    Mfg
    Vincent

    Die einzige Stelle, an der die Zeichenfolge "Festplatte" auftaucht, ist Zeile 34, also muss der Fehler folglich auch dort liegen. Verwende einfach mal MessageBox.Show statt MsgBox, dass solltest du aber ohnehin tun.

    Das merkwürdige daran ist , wenn ich einen Code darüber lege wird der ausgeführt liegt er darunter wird er es nicht
    Das ist überhaupt nicht merkwürdig. Der Code wird halt soweit ausgeführt, bis der Fehler auftritt.
    Schau dir einfach mal die Parameter von MsgBox an:

    Quellcode

    1. Public Function MsgBox( _
    2. ByVal Prompt As Object, _
    3. Optional ByVal Buttons As MsgBoxStyle = MsgBoxStyle.OKOnly, _
    4. Optional ByVal Title As Object = Nothing _
    5. ) As MsgBoxResult
    Der zweite ist vom Typ MsgBoxStyle, du kannst also schwer einen String übergeben.
    Ich übergeb keinen string , das einzige was ich tue ist ErrorToString um mir den fehler anzeigen zu lassen....
    Aber anscheind funktioniert es nun wieder, aber was ist wenn ich die try-schleife entferne- funktioniert es dann immernoch ?
    Weißt du überhaupt, was Typen sind?
    "Festplatte" ist natürlich ein String, und das ist es auch immer noch, wenn du diesen String als Fenstertietel festlegst.
    Nur legst du ihn so gar nicht als Fenstertietel fest, denn wie du in der Signatur aus Post 5 erkennen kannst, ist der Fenstertitel der 3. Parameter.
    Außerdem hab ich nichtmal ein String namens Festplatte
    Das ist richtig, denn ein String hat keinen Namen. Ein String hat nur einen Inhalt, und der ist in deinem Fall "Festplatte".
    Ich meine , wieso zeigt er mir den Fehler unter der Kategorie Festplatten an , normalerweise betrifft das ja Logische Laufwerke ( hab ich auch mit eingebaut, aber unter ganz anderen Kriterien ) oder etwas nicht ?
    Etwas was auch komisch ist, wenn ich den großen Try-Block ( Der jeden Code betrifft ) Weg lasse funktioniert das Prog. garnicht ...
    Überprüfe jedes Laufwerk als allererstes ob es bereit ist mit If mydrive.IsReady Then
    Wenn es bereit, kannst du deinen Code ausführen, wenn nicht, dann kannst du nur den Buchstaben und den Typ ermitteln.
    Grüße,
    Lukas

    Fragen über Themen im Forum per Konversation werden gelöscht und die Absender blockiert...
    Ja, ok ich werde es mal versuchen.
    Hier mal mein ganzes Form-Load Ereignis mit Import etc.

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Management.Instrumentation
    3. Imports System.Management
    4. Imports System.IO
    5. Public Class Form1
    6. Dim Rams As Double
    7. Dim Rames As String
    8. Dim CPUS As String
    9. Dim Greka As String
    10. Dim Grekas As String
    11. Dim Greekas As String
    12. Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
    13. Application.Exit()
    14. End Sub
    15. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    16. Try
    17. OS.Text = My.Computer.Info.OSFullName & My.Computer.Info.InstalledUICulture().ToString
    18. version.Text = System.IO.File.ReadAllText("version.txt")
    19. Rams = My.Computer.Info.TotalPhysicalMemory / 1048576 / 1024
    20. Rames = Rams.ToString("N") & "GB"
    21. Try
    22. 'Laufwerke
    23. For Each Drive As IO.DriveInfo In IO.DriveInfo.GetDrives
    24. If Drive.DriveType = IO.DriveType.CDRom Then
    25. If Drive.IsReady Then
    26. ListBox2.Items.Add(Drive.Name & " (" & Drive.VolumeLabel & ")")
    27. Else
    28. ListBox2.Items.Add(Drive.Name & " (nicht bereit)")
    29. End If
    30. End If
    31. Next
    32. Catch ex As Exception
    33. MsgBox(ErrorToString, CType("Laufwerk", MsgBoxStyle))
    34. End Try
    35. Try
    36. 'Festplatte
    37. For Each mydrive As IO.DriveInfo In IO.DriveInfo.GetDrives
    38. Dim Listinfo As String = "Gesammter Speicher : " & (mydrive.TotalSize / 1024 / 1024 / 1024).ToString("N") & " GB, " & "Verfügbarer Speicher : " & (mydrive.TotalFreeSpace / 1024 / 1024 / 1024).ToString("N") & " GB "
    39. Dim listitem As String = mydrive.Name & " (" & mydrive.VolumeLabel & ", "
    40. Select Case mydrive.DriveType
    41. Case IO.DriveType.CDRom
    42. listitem &= "CD / DVD"
    43. Case IO.DriveType.Fixed
    44. listitem &= "Feste Größe"
    45. Case IO.DriveType.Network
    46. listitem &= "Netzwerk"
    47. Case IO.DriveType.Removable
    48. listitem &= "Externes Peripheriegerät"
    49. Case Else
    50. listitem &= "Unlesbar"
    51. End Select
    52. listitem &= ")"
    53. If mydrive.IsReady Then
    54. ListBox1.Items.Add(listitem & Listinfo)
    55. Else
    56. MessageBox.Show("Keine Festplatte Gefunden", "Festplatte01")
    57. End If
    58. Next
    59. Catch ex As Exception
    60. MessageBox.Show(ErrorToString, "Festplatte03")
    61. End Try
    62. Try
    63. Dim objQuery As New ObjectQuery("SELECT * FROM Win32_Processor")
    64. Dim ObjSearcher As New ManagementObjectSearcher(objQuery)
    65. For Each memObj As ManagementObject In ObjSearcher.Get()
    66. Dim Des As String = memObj("Name").ToString
    67. CPUS = Des
    68. Next
    69. Catch ex As Exception
    70. MsgBox(ErrorToString, CType("Klein-CPU", MsgBoxStyle))
    71. End Try
    72. Try
    73. Dim objQuery2 As New ObjectQuery("SELECT * FROM Win32_VideoController")
    74. Dim ObjSearcher2 As New ManagementObjectSearcher(objQuery2)
    75. For Each memObj As ManagementObject In ObjSearcher2.Get
    76. Dim GPU As String = memObj("Name").ToString()
    77. Dim Takt As String = Convert.ToInt64(memObj("AdapterRAM")).ToString()
    78. Dim Refresh As String = Convert.ToInt64(memObj("MaxRefreshRate")).ToString()
    79. Greka = GPU
    80. Grekas = CStr(CDbl(Takt) / 1024 / 1024)
    81. Greekas = Refresh
    82. Next
    83. Catch ex As Exception
    84. MsgBox(ErrorToString, CType("Klein-GPU", MsgBoxStyle))
    85. End Try
    86. Try
    87. 'CPU
    88. Dim objQuery5 As New ObjectQuery("SELECT * FROM Win32_Processor")
    89. Dim ObjSearcher5 As New ManagementObjectSearcher(objQuery5)
    90. For Each memObj As ManagementObject In ObjSearcher5.Get
    91. Dim Name As String = memObj("Name").ToString()
    92. Dim MaxTakt As String = Convert.ToInt64(memObj("MaxClockSpeed")).ToString()
    93. Dim Takt As String = Convert.ToInt64(memObj("CurrentClockSpeed")).ToString()
    94. Dim Hersteller As String = memObj("Manufacturer").ToString()
    95. Dim Beschreibung As String = memObj("Description").ToString()
    96. CPU_Name.Text = "Name des Prozessors : " + Name
    97. CPU_Takt.Text = "Takt des Prozessors : " + Takt
    98. CPU_MaxTakt.Text = "Maximaler Takt des Prozessors : " + MaxTakt
    99. CPU_Hersteller.Text = "Hersteller des Prozessors : " + Hersteller
    100. CPU_Des.Text = "Beschreibung des Prozessors : " + Beschreibung
    101. Next
    102. Catch ex As Exception
    103. MsgBox(ErrorToString, CType("CPU", MsgBoxStyle))
    104. End Try
    105. Try
    106. 'GPU
    107. Dim objQuery6 As New ObjectQuery("SELECT * FROM Win32_VideoController")
    108. Dim ObjSearcher6 As New ManagementObjectSearcher(objQuery6)
    109. For Each memObj As ManagementObject In ObjSearcher6.Get
    110. Dim GPU As String = memObj("Name").ToString()
    111. Dim Takt As String = Convert.ToInt64(memObj("AdapterRAM")).ToString()
    112. Dim Refresh As String = Convert.ToInt64(memObj("MaxRefreshRate")).ToString()
    113. Greka = GPU
    114. Grekas = CStr(CDbl(Takt) / 1024 / 1024)
    115. Greekas = Refresh
    116. Next
    117. Catch ex As Exception
    118. MsgBox(ErrorToString, CType("GPU", MsgBoxStyle))
    119. End Try
    120. All.Text = CPUS + " , " + Rames + " , " + Greka + " @" + Greekas + "Hz " + Grekas + "MB"
    121. Catch ex As Exception
    122. MsgBox(ErrorToString, CType("FEHLER!", MsgBoxStyle))
    123. End Try
    124. End Sub


    LG