Хотите использовать WMI для мониторинга SMART через vb.net - PullRequest
0 голосов
/ 29 июля 2011

код ниже:

For Each queryObj As ManagementObject In searcher.Get()
    objWriter = New StreamWriter("C:\vsl\scripts\results.txt", False)
    objWriter.Write("Active: {0} ", queryObj("Active"))
    objWriter.Write(" InstanceName: {0} ", queryObj("InstanceName"))
    objWriter.Write(" PredictFailure: {0} ", queryObj("PredictFailure"))
    objWriter.Write(" Reason: {0} ", queryObj("Reason"))
    objWriter.Close()
Next

Похоже, что данные извлекаются с моего единственного внутреннего диска IDE.

Две вещи, которые я не понимаю.

  1. Строка objWriter.Write ("Active: {0}", queryObj ("Active")) не работает, если вы измените данные между первым набором кавычек. Таким образом, изменение Active: {0} на Active: {1} вызывает ошибку, которую Try Catch не перехватывает (это для ... next находится в перехвате try). Я предполагал, что материал внутри кавычек был просто текстом и мог быть изменен на что угодно? Почему попытка поймать его не поймать?

  2. Не читает внешний USB-накопитель при подключении. Вот как я узнал о пункте 1 выше ... Я изменил {0} на {1}, и он вылетает.

1 Ответ

0 голосов
/ 30 июля 2011

Вам нужно опубликовать еще немного кода, чтобы помочь нам с # 2, например, как определяется searcher.

Но ваш первый вопрос довольно прост.Строка {0} является стандартным синтаксисом замены.Если бы вы написали это вместо этого:

objWriter.Write("Hello {0}, my name is {1}", "Alice", "Bob")

Это выписало бы:

Hello Alice, my name is Bob

{0} представляет первый элемент после начальной строки (в программах числа начинаются с нуля, поэтомупервый ноль, второй один и т. д.).В вашем случае {0} заменяется тем, что возвращает queryObj("Active").

Обычно вы можете иметь столько {X}, сколько захотите, если у вас есть значения для их резервного копирования.Иметь больше значений - это нормально, слишком мало - ошибка, с которой вы столкнулись.

Так что все в порядке, потому что последнее ("Боб") просто игнорируется:

objWriter.Write("Hello {0}", "Alice", "Bob")

Но это нехорошо, потому что нам нечего заполнять {1}

objWriter.Write("Hello {0}, my name is {1}", "Alice")
...