2011-06-29 19 views
0

我发现很多VB6的例子和一些C#的例子,但在VB.NET中没有具体的解决方案。简而言之,我需要用尽可能少的代码行来获取下一个可用的驱动器号。任何人都有一个好榜样?VB.NET获取下一个可用的驱动器号

+0

一般规则:学习C#。任何有能力的.NET程序员都应该理解C#和.NET,更好的是能够胜任至少一个。然后,您将能够理解C#代码示例并将其毫无困难地转换为VB。 –

+0

这里有很多转换器。尝试http://converter.telerik.com/他们通常做95%的工作(有时更多);你通常还得稍微调整一下结果。 –

回答

1

尝试是这样的:

Public Function FindNextAvailableDriveLetter() As String 
' build a string collection representing the alphabet 
Dim alphabet As New StringCollection() 

Dim lowerBound As Integer = Convert.ToInt16("a"C) 
Dim upperBound As Integer = Convert.ToInt16("z"C) 
For i As Integer = lowerBound To upperBound - 1 
    Dim driveLetter As Char = ChrW(i) 
    alphabet.Add(driveLetter.ToString()) 
Next 

' get all current drives 
Dim drives As DriveInfo() = DriveInfo.GetDrives() 
For Each drive As DriveInfo In drives 
    alphabet.Remove(drive.Name.Substring(0, 1).ToLower()) 
Next 

If alphabet.Count > 0 Then 
    Return alphabet(0) 
Else 
    Throw New ApplicationException("No drives available.") 
End If 
End Function 

来源:CodeKeep

+0

没有理由将'Throw'的参数放在括号内。 –

+0

谢谢,我会试试这个。问题:转换函数中的“C”是什么?我在不同的字符串函数中看到了很多。 –

+0

我相信这是告诉转换函数将“a”视为单个字符而不是字符串。 – NickHeidke

0

如果你有C#代码,然后把它通过developerfusion coverter - 这应该让你接近(虽然你可能有调整它)。

1

要列出逻辑驱动器试试这个....

包括完整的代码....

Imports System.Management 

Public Class Form1 

    Dim WithEvents w As ManagementEventWatcher 
    Dim q As WqlEventQuery 
    Delegate Sub LoadList() 

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing 
     w.Stop() 
    End Sub 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     Try 
      q = New WqlEventQuery 
      q.QueryString = "SELECT * FROM" & _ 
         " __InstanceCreationEvent WITHIN 1 " & _ 
         "WHERE TargetInstance isa ""Win32_LogicalDisk""" 
      w = New ManagementEventWatcher(q) 
      w.Start() 
     Catch ex As Exception 
      Trace.WriteLine(ex.ToString) 
     End Try 
     LoadDriveList() 
    End Sub 

    Private Sub LoadDriveList() 
     ListBox1.Items.Clear() 
     Dim moReturn As Management.ManagementObjectCollection 
     Dim moSearch As Management.ManagementObjectSearcher 
     Dim mo As Management.ManagementObject 

     moSearch = New Management.ManagementObjectSearcher("Select * from Win32_LogicalDisk") 

     moReturn = moSearch.Get 
     For Each mo In moReturn 
      ListBox1.Items.Add(mo("Name").ToString) 
     Next 

    End Sub 

    Private Sub w_EventArrived(ByVal sender As Object, ByVal e As System.Management.EventArrivedEventArgs) Handles w.EventArrived 
     ListBox1.Invoke(New LoadList(AddressOf LoadDriveList)) 
    End Sub 

End Class 
+0

问题是4个月大,并有一个公认的答案。你为什么打扰?!? –

+2

为什么不呢?很高兴地添加更多信息... –

+2

是的,绝对很好看到更多的选择。 – Magnus

相关问题