想通过vb.net使用WMI监控SMART

时间:2011-07-29 18:49:45

标签: vb.net wmi disk-smart

以下代码:

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”))行不起作用。因此,将有效:{0} 更改为有效:{1} 会导致Try Catch无法捕获的错误(这对于...下一步是在try catch中)。我假设引号内的东西只是文字,可以改成什么?为什么捕捉不到它?

  2. 连接时未读取USB外置驱动器。这就是我发现上面第1项的方法......我将{0}更改为{1}并且崩溃了。

1 个答案:

答案 0 :(得分:0)

您需要发布更多代码来帮助我们使用#2,例如searcher的定义方式。

但你的第一个问题很简单。字符串{0}是标准替换语法。如果你写了这个:

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

它会写出:

Hello Alice, my name is Bob

{0}表示初始字符串后的第一个项目(编程编号从零开始,因此第一个为零,第二个为1,等等)。在您的情况下,{0}将被queryObj("Active")返回所取代。

只要您有值备份它们,您通常可以拥有任意数量{X}。拥有更多的值是可以的,因为你遇到的错误太少了。

所以这没关系,因为最后一个(“Bob”)被忽略了:

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

但这不合适,因为{1}

没有任何内容可以填写
objWriter.Write("Hello {0}, my name is {1}", "Alice")