【问题标题】:VB.NET get next available drive letterVB.NET 获取下一个可用的驱动器号
【发布时间】:2012-10-08 18:04:44
【问题描述】:

我找到了很多 VB6 示例和一些 C# 示例,但在 VB.NET 中没有具体的解决方案。简单地说,我需要用尽可能少的代码行来获取下一个可用的驱动器号。谁有好的例子?

【问题讨论】:

  • 一般规则:学习C#。任何称职的 .NET 程序员都应该了解 C# 和 .NET,最好同时精通这两种语言并至少精通其中一种。然后你就可以看懂C#代码样例,并毫不费力地将它们翻译成VB。
  • 那里有很多转换器。试试converter.telerik.com 他们通常会完成 95% 的工作(有时更多);你通常仍然需要稍微调整一下结果。

标签: vb.net


【解决方案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

【讨论】:

  • 没有理由将Throw 的论点放在括号中。
  • 谢谢,我会试试这个。问题:转换函数中的“C”是什么?我在不同的字符串函数中看到了很多。
  • 我相信这是告诉转换函数将“a”视为单个字符而不是字符串。
  • 嗯。这似乎对我有用。您的计算机已经有一个 A: 驱动器?
  • 你能在调试中观察“drives”变量,看看它认为哪些驱动器已经映射了吗?
【解决方案2】:

如果您有 C# 代码,则将其放入 developerfusion coverter - 这应该可以让您接近(尽管您可能需要对其进行调整)。

【讨论】:

    【解决方案3】:

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

    包括完整代码....

    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
    

    【讨论】:

    • 这个问题已经 4 个月了,并且有一个公认的答案。你为什么要打扰?!?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多