通过目录搜索文件夹 ASP VB.NET

search folder through directory ASP VB.NET

有没有办法通过网络搜索文件夹名称(无论是根文件夹还是子文件夹以及里面的文件)vb.net?我在整个互联网上进行了搜索,但没有找到任何帮助。这是我到目前为止所做的。但这是 windows 形式。 我正在寻找网络表格。谢谢

 Protected Sub search_Click(sender As Object, e As EventArgs) Handles Search.Click
        Dim MainFldr = "d:\shared\"
        Dim SKfiles() As System.IO.FileInfo
        Dim FldrInfo As New System.IO.DirectoryInfo(MainFldr)
        Dim flpth As String
        flpth = ""
        ListBox2.Items.Clear()
        SKfiles = FldrInfo.GetFiles("*" & txtfolder.Text & "*.*", IO.SearchOption.AllDirectories)
        For Each MySearchfile In SKfiles
            flpth = ""
            flpth = MySearchfile.DirectoryName + "\" + MySearchfile.Name
            ListBox2.Items.Add(flpth)
            Application.DoEvents()
        Next
    End Sub

好吧,事实证明你可以在网络领域做同样的事情。

但是,要记住一个巨大的“问题”吗?

对于任何网页url、网页link、网页文档参考?您将为相关文件使用网站 URL。

所以,假设您有网站 (root),然后有一个名为 Images 的文件夹。

images\cat.jpg

因此,网站标记的路径名称将是: "~/images/cat.jpg

然而,当你运行代码落后时? (您的 vb.net 代码)。现在,所有和每个文件引用都必须是完整的正常标准 windows 路径名!!!

那么,如果说您的 vb.net 代码是为了“测试”上述文件是否存在?

假设我们在网页上放置了一个按钮和一个图像控件 - 我们有:

让我们把这个变得超级简单 - 我们希望在 vb 代码中将上面的图像控件设置为我们的 Content 文件夹中的图片。

嗯,你得把基于web的url翻译成平面jane good old fashioned windows文件路径名!

所以,你会这样做:

Protected Sub Button1_Click(sender As Object, e As EventArgs) 句柄 Button1.Click

    Dim strF As String
    strF = "~/Content/uncheck1.jpg"

    Dim strFInternal = Server.MapPath(strF)
    Debug.Print(strFInternal)
    If File.Exists(strFInternal) Then

        Image1.ImageUrl = strF

    End If


End Sub

请注意我们的内部代码必须如何使用一个很好的旧平面简 windows 文件路径名。

但是网页上的东西呢?它们总是从网站的角度引用。在我 运行 上面的代码之后,我得到了这个:

可是那个debug.print的文件名呢?这是输出:

Output:
C:\Users\AlbertKallal\source\repos\WebFriendlyTest\Content\uncheck1.jpg

注意上面的非常小心?这是一个 plane jane INTERNAL 文件名。我无法告诉你我为上述简单概念苦苦挣扎了多少次:

网页控件和标记:使用正确的 URL 路径名

隐藏代码:使用完整的windows路径名!!!

所以,你发布的代码?它会在原样附近工作!!!!

这里唯一的问题是您希望将哪个文件夹推送到该列表框?

如上所说,我想推出该内容文件夹中的所有文件。

我的意思是,如果我愿意,我可以输入这个来显示那个复选框:

所以网页现在在页面上显示了一张简单的图像 - 因为我输入了完整正确的 url!!!

那么,我们如何在 Web 表单上放置一个列表框,当我们单击我们的按钮时,我们会显示该 Content 文件夹中的所有文件。现在我可以“猜测”文件夹的位置,但是要使用该文件夹的任何网页,它必须是网站文件夹(或子文件夹)的一部分。该网站不能只是出乎意料地窃取或获取计算机上的任何文件 - 那些 URL 只能指向网站的根目录 + 任何子文件夹。

因此本网站上的内容文件夹是这样的:

因此,如您所见,我可以输入一个 url,这是基础站点,然后是该文件夹,然后是该文件夹中存在的图片 (uncheck1.jpg) .

所以,让我们放入一个列表框,然后将该文件夹中的所有文件推送到表单上的列表框:

我们的标记是这样的:

所以,只有一个按钮和一个列表框。

以及内容文件夹的按钮代码?好吧,我们会用这个:

(我删除了搜索部分 - 但这是标准代码 - 就像你过去一直使用的一样!!!

所以:

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim MainFldr = "~/Content"
    Dim FldrInternal = Server.MapPath(MainFldr)

    Dim SKfiles() As System.IO.FileInfo
    Dim FldrInfo As New System.IO.DirectoryInfo(FldrInternal)

    ListBox1.Items.Clear()

    SKfiles = FldrInfo.GetFiles("*.*", IO.SearchOption.AllDirectories)

    For Each MyFile In SKfiles

        ListBox1.Items.Add(MyFile.Name)

    Next


End Sub

我决定不使用完整路径名 - 但我可以使用。

输出:

所以请记住,任何网页?它只能使用属于网站一部分的文件和内容。还有任何 url - 即使是图片、文件等?那么它必须是一个有效的 URL.

但是后面的代码呢?它不仅限于根文件夹和子文件夹中的文件夹和文件。您实际上可以使用您的 d: 驱动器,或网络上的其他任何东西 get/grab/use/fetch。所以后面的代码是你的飞机jane windows代码。

网站 URL 和网页中的文件因此只能使用作为网站一部分的 folders/files。但是,在某些情况下,假设您有其他一些带有图片和文件文件夹的大型服务器 - 但您的网站(和有效的 URL's)需要使用该文件夹?好吧,然后您设置所谓的虚拟目录。这与使用 IIS 速成版相反,您非常需要使用 IIS。 (您可以 google 快速版 + 设置虚拟文件夹)。

设置好虚拟文件夹后?它看起来像站点中的任何其他子文件夹 - 但它们不再位于站点中。 (这也经常用于文档或 PDF 文件夹)。

这只是看起来像一个子文件夹,但它实际上是一个可以指向计算机网络上任何其他文件夹的文件夹。当然,这只有在最终的网络服务器和发布的站点位置是运行宁在您服务器上的一个盒子上时才有效,并且说不是一些托管计划。

所以应该编写一个不要考虑完整有效的本地服务器文件名,而是尝试始终考虑 URL 和路径名,甚至是该网站子文件夹中的路径名。但在所有情况下,操作背后的代码都是针对 plane jane 有效完整路径名的。

但是,您是否觉得debug.print 简单的.jpg 文件名很长或很有趣?好吧,在已发布的服务器上,这些文件路径名可能是超级疯狂的路径 - 但您从不关心是否按照上述方式引用文件夹。

我通过创建如下所示的搜索来解决问题。搜索文件夹名称和子文件夹。

 Dim files As FileInfo() = Nothing
 Dim dirInfo As DirectoryInfo = New DirectoryInfo(startFolder)
 Dim dir As DirectoryInfo() = Nothing
 dir = dirInfo.GetDirectories(folderName, SearchOption.AllDirectories)

        For i = 0 To dir.Length - 1

            If dir(i).Name = folderName Then
                Dim path2 = Directory.GetDirectories(dir(i).FullName)
                If path2.Length = 0 Then
                    files = dir(i).GetFiles()
                    For Each file In dir(i).GetFiles()
                        path = CStr(dir(0).FullName)
                        path = path.Remove(0, 11)
                        HiddenField1.Value = path & "\" & file.Name
                        HiddenField2.Value = file.Name
                        Dim tr As New TableRow
                        tr.Cells.Add(New TableCell With {.Text = file.Name})
                        grd.Rows.Add(tr)
                        Dim tdlnk As New TableCell
                        Dim lnk As New HtmlAnchor
                        tdlnk.Controls.Add(lnk)
                        tr.Cells.Add(tdlnk)
                    Next
                    Exit For
                Else
                    Dim aaa As String = path2(0).Substring(path2(0).Length - 10)
                    startFolder = path2(0).ToString
                    folderName = aaa
                    Dim files1 As FileInfo() = Nothing
                    Dim dirInfo1 As DirectoryInfo = New DirectoryInfo(startFolder)
                    Dim dir1 As DirectoryInfo() = Nothing
                    dirInfo1.GetDirectories(folderName, SearchOption.AllDirectories)
                    files1 = dirInfo1.GetFiles
                    For Each file In dirInfo1.GetFiles
                        path = CStr(dirInfo1.FullName)
                        path = path.Remove(0, 11)
                        HiddenField1.Value = path & "\" & file.Name
                        HiddenField2.Value = file.Name
                        Dim tr As New TableRow
                        tr.Cells.Add(New TableCell With {.Text = file.Name})
                        grd.Rows.Add(tr)
                        Dim tdlnk As New TableCell
                        Dim lnk As New HtmlAnchor
                        tdlnk.Controls.Add(lnk)
                        tr.Cells.Add(tdlnk)
                    Next
                    Exit For
                End If
            End If

        Next