搜索包含字符串的文件夹并打开

时间:2015-06-22 22:20:00

标签: vb.net

我正在尝试编写一个非常简单的程序,需要在文本框中输入4位数字,目标是打开一个以这些输入的4位数字结尾的文件夹。

我到目前为止的代码如下:

 Private Sub GoBut_Click(sender As System.Object, e As System.EventArgs) Handles GoBut.Click

    Dim wdcode As String
    Dim wd_path As String
    Dim design_drive As String

    wdcode = TextCode.Text

    design_drive = "Y:\Sample Code Sequence\"

    wd_path = design_drive & wdcode

    Process.Start("explorer.exe", String.Format("/n, /e, {0}", wd_path))
End Sub

我是VB的相对新手所以请保持相当直接。我希望在资源管理器中打开的文件夹长度为8位,位于子目录中。

因此,总而言之,文件夹和子文件夹采用以下格式:

Y:/Sample Code Sequence/1001 - 1100/15061089
Y:/Sample Code Sequence/1001 - 1100/15061090
Y:/Sample Code Sequence/1001 - 1100/15061091
Y:/Sample Code Sequence/1001 - 1100/15071092
....
Y:/Sample Code Sequence/1101 - 1200/15071111
Y:/Sample Code Sequence/1001 - 1100/15071131
etc

8位数文件夹名称的最后4位数字是唯一的。

2 个答案:

答案 0 :(得分:0)

递归函数可能更适合长期可重用性,但我把它写成一个嵌套循环。它采用您的基目录(在您的情况下,“Y:\ Sample Code Sequence”)并使用DirectoryInfo类的GetDirectories函数返回基目录的子目录。然后循环遍历这些子目录并执行相同的操作,然后在找到匹配项时返回该目录的完整路径(如果未找到匹配项,则返回Nothing)。

@SharedPref
public interface SharedPreferencesInterface {
    @DefaultBoolean(true)
    boolean showDeviceName();

答案 1 :(得分:0)

您可以使用接受通配符的My.Computer.FileSystem.GetDirectoriesMSDN):

Dim found As String = My.Computer.FileSystem.GetDirectories("Y:\Sample Code Sequence\", _
                                      FileIO.SearchOption.SearchAllSubDirectories, _
                                      "*1089").FirstOrDefault()
MessageBox.Show(found)

要应用此功能,您需要将您要查找的值连接到" *"。

您可以添加进一步的检查;例如,要检查文件夹名称是否包含8个字符(结尾1089):

Dim found2 As String = My.Computer.FileSystem.GetDirectories("Y:\Sample Code Sequence\", _
                                      FileIO.SearchOption.SearchAllSubDirectories, _
                                      "*1089").Where(Function(x) x.LastIndexOf("\"c) = x.LastIndexOf("1089") - 5).FirstOrDefault()
MessageBox.Show(found2)

通过使用????1089进行搜索,实际上可以简化这一点,在哪里?是单个字符的通配符。

检查文件夹名称是否为8个字符,从4位开始,需要更多工作:

Dim found3 As String = My.Computer.FileSystem.GetDirectories("Y:\Sample Code Sequence\", _
                                      FileIO.SearchOption.SearchAllSubDirectories, _
                                      "*1089").Where(Function(x)
                                                         Return x.LastIndexOf("\"c) = x.LastIndexOf("1089") - 5 _
                                                             AndAlso IsNumeric(x.Substring(x.LastIndexOf("\"c) + 1, 4))
                                                     End Function).FirstOrDefault()
MessageBox.Show(found3)

如果您首先找到文件夹,然后单独检查文件夹名称,而不是像我所做的那样单个语句,将会更容易理解。

您还应该检查不匹配,Nothing