从路径获取文件夹并打开该文件夹中的文件

时间:2018-07-17 18:41:26

标签: vb.net

我正在制作一个VB.Net应用程序,该应用程序将用于更快地打开Visual Studio项目。我将项目添加到ComboBox中,我想使用一个按钮打开SLN文件。到目前为止,这是我的代码。

     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    For Each dir As String In Directory.GetDirectories(My.Computer.FileSystem.SpecialDirectories.MyDocuments + "\Visual Studio 2017\Projects\")
        Dim Folders As String = dir.Split("Projects\")(1)
        Dim Project As String = Folders.Split("\")(1)
        CBProjects.Items.Add(Project)
    Next
End Sub

Private Sub BTNOpen_Click(sender As Object, e As EventArgs) Handles BTNOpen.Click

End Sub

因此,它获取文件夹并拆分它们,因此仅显示项目名称。由于某种原因,它为我的一个项目获取了一个空白文件夹。另外,现在我将其拆分了,我如何获得所选文件夹的完整路径,因此可以使用System.IO.File.Open()打开它,谢谢! 编辑:它正在提供一个空文件夹,因为它是在P处将其拆分。

2 个答案:

答案 0 :(得分:2)

正如您所说,代码中的问题是字符串在“ P”上分割。这是因为您使用的String.Split(Char()) overload一个字符数组作为参数,这实际上是一个字符串。找到这些字符中的任何一个后,字符串将被分割。

相反,您应该使用String.Split(String(), StringSplitOptions) overload,它使用字符串数组

Dim Project As String = dir.Split(New String() {"Projects\"}, StringSplitOptions.RemoveEmptyEntries)(1)

不过,您可以在此处进行两件事改进:

  1. 使用Path.Combine()来构造它,而不是将两个字符串手动连接到路径中。这包括错误检查并确保路径构造正确。

  2. 使用Path.GetFileName()来获取项目目录的名称,而不是拆分字符串。

结果代码为:

For Each dir As String In Directory.GetDirectories(Path.Combine(My.Computer.FileSystem.SpecialDirectories.MyDocuments, "Visual Studio 2017", "Projects"))
    Dim Project As String = Path.GetFileName(dir)
    CBProjects.Items.Add(Project)
Next

答案 1 :(得分:1)

为您的自定义ComboItem添加新类

Public Class ProjectComboItem
    Public Display As String
    Public ProjectPath As String
    Public Overrides Function ToString() As String
        Return Display
    End Function
End Class

将项目加载到ComboBox中:

Private Sub loadProjectComboBox()

    ProjectComboBox.Items.Clear()

    Dim projectParent As String = "<yourpath>\Visual Studio 2017\Projects"
    Dim paths() As String = Directory.GetFiles(projectParent, "*.sln", SearchOption.AllDirectories)

    For Each path As String In paths
        Dim cmbItem As New ProjectComboItem
        Dim fi As FileInfo = New FileInfo(path)
        cmbItem.Display = fi.Name
        cmbItem.ProjectPath = fi.FullName
        ProjectComboBox.Items.Add(cmbItem)
    Next

End Sub

在需要时获取完整路径:

Private Sub OpenButton_Click(sender As Object, e As EventArgs) Handles OpenButton.Click
    Try
        If Not ProjectComboBox.SelectedItem Is Nothing Then
            Dim cmbItem As ProjectComboItem = DirectCast(ProjectComboBox.SelectedItem, ProjectComboItem)
            Process.Start(cmbItem.ProjectPath)
        End If
    Catch ex As Exception
        MessageBox.Show(String.Concat("An error occurred: ", ex.Message))
    End Try
End Sub