0

下面的代码:

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 无法捕获的错误(this for...next 在 try catch 中)。我认为引号内的内容只是文本,可以更改为任何内容?为什么 try catch 没有捕捉到它?

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

4

1 回答 1

0

您需要发布更多代码来帮助我们解决#2,例如如何searcher定义。

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

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

它会写出:

Hello Alice, my name is Bob

表示初始字符串之后的{0}第一项(在编程中,数字从零开始,因此第一项为零,第二项为一,依此类推)。在你的情况下,{0}被任何queryObj("Active")回报所取代。

{X}只要您有支持它们的价值,您通常可以拥有尽可能多的东西。拥有更多的价值是可以的,拥有太少是你遇到的错误。

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

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

但这不行,因为我们没有什么可填写的{1}

objWriter.Write("Hello {0}, my name is {1}", "Alice")
于 2011-07-29T20:28:52.477 回答