【问题标题】:Listing folders in folders - then creating arrays in JS for each of the folders - ASP.NET VB列出文件夹中的文件夹 - 然后在 JS 中为每个文件夹创建数组 - ASP.NET VB
【发布时间】:2023-04-04 00:39:01
【问题描述】:

首先,我是一名平面设计师,所以如果这个编程问题看起来很愚蠢,请忽略......我知道这个问题可以分成两个或三个较小的问题,但因为我对 VB 编码真的很陌生.NET 它会杀了我试图把这些东西放在一起......

目录结构: 我的目录结构如下;

ad_folder
--folderA
--folderB
--folderC
--anotherFolder
--etcfolder
--afile.aspx
--anotherfile.gif
ad_code
--folderA
--folderB
--afile.aspx
--anotherfile.gif
ad_prep
--folderA
--etcfolder
--afile.aspx
--anotherfile.gif
ad_bin
--etcfolder
--afile.aspx
--anotherfile.gif
other Folder
files folder
assetsfolder
index.aspx
web.config
image.gif

手头的任务:

我希望 VB.NET 中的代码创建文件夹内容的 javascript 数组,然后可以在客户端使用。 我只需要包含在以 ad_ 开头的文件夹中的所有文件夹的数组 和所有基本文件夹的数组。像这样:

var folders=["ad_folder","ad_code","ad_prep","ad_bin"];
var ad_folder=["folderA","folderB","folderC","anotherFolder","etcfolder"];
var ad_code=["folderA","folderB"];
var ad_prep=["folderA","etcfolder"];
var ad_bin=["etcfolder"];

请注意,我不知道文件夹的数量或名称,它们在不同情况下可能会有所不同,我只有根路径。抱歉听起来很愚蠢。

我会感谢任何人可以提供的任何帮助...我对编程非常陌生,我已经用谷歌搜索了如何在 VB.net 中显示文件夹内容并且代码有效但无法弄清楚如何创建数组并仅显示以“ad_”开头的文件夹中的文件夹。

非常感谢... :) ...如果有人需要任何图形设计/photoshop 帮助...我会很高兴 ;) ...请告诉我。



更新: 好吧......通过谷歌搜索我知道:

  1. System.IO.DirectoryInfo 和 System.IO.FileInfo 用于获取文件夹。

  2. 文字控件可用于在 ASP.NET 中创建 javascript 数组。然后可以在客户端使用这些js数组。

  3. 我想要的伪类是这样的;

声明路径 如果路径存在且不为空,则 ' 获取所有以 'ad_' 开头的文件夹 ' 如果以 'ad_' 开头的文件夹 > 0 ' 遍历所有以 'ad_' 开头的文件夹 ' ' 如果此文件夹存在且不为空 ' ' 获取此文件夹中的所有文件夹 ' ' 为名为 'this folder's name' 的 javascript 数组创建文字控件 ' 为名为 'folders' 的 javascript 数组创建文字控件,其中包含以 'ad_' 开头的所有文件夹的名称。

【问题讨论】:

    标签: .net asp.net javascript vb.net


    【解决方案1】:

    编辑:我看到你已经弄清楚了如何包含父文件夹数组,但我继续更新了我的答案以包含它。我还在你要求的排序中添加了,虽然我不确定它是否像你想要的那样工作,请告诉我。


    我相信下面的代码会做你想做的事。重要的一行是响应写入 GetJavaFolderArrays 的那一行。把它放在你想要 javascript 数组输出的地方。在我的示例中,我将它放在一个 javascript 块中,这对我来说很有意义 :)

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <script runat="server">
            Private dirArray As String = "var {0}=[{1}];"
    
            Protected Function GetJavaFolderArrays(ByVal RootPath As String) As String
                'get all folders starting with ad_'
                Dim adFolders() As String = Directory.GetDirectories(RootPath, "ad_*")
    
                'sort using numbers'
                Array.Sort(adFolders, New PathNumberSorter())
    
                'string builder to hold the output'
                Dim sb As New StringBuilder()
    
                'build parent folder list
                sb.AppendLine(GetADFolder("folders", adFolders))
    
                'loop through folders'
                For Each d As String In adFolders
                    sb.AppendLine(GetADFolder(Path.GetFileName(d), Directory.GetDirectories(d)))
                Next
    
                'return the string builder'
                Return sb.ToString()
            End Function
    
            Protected Function GetADFolder(ByVal ParentName As String, ByVal cf() As String) As String
                'sort the array'
                Array.Sort(cf, New PathNumberSorter())
    
                'javascript array'
                Dim jarray As String = String.Empty
    
                'loop through folders'
                For Each d As String In cf
                    jarray += String.Format("""{0}"",", Path.GetFileName(d))
                Next
    
                'remove extra ,'
                jarray = jarray.Trim(",")
    
                Dim jfinal As String = String.Format(dirArray, ParentName, jarray)
    
                Return jfinal
            End Function
    
            Friend Class PathNumberSorter
                Implements IComparer(Of String)
    
                'used for finding all numbers in string'
                Private pattern As String = "[0-9]+"
    
                Public Function Compare(ByVal x As String, ByVal y As String) As Integer Implements System.Collections.Generic.IComparer(Of String).Compare
                    'get number from x and y
                    Dim xMatch As RegularExpressions.Match = Regex.Match(Path.GetFileName(x), pattern)
                    Dim yMatch As RegularExpressions.Match = Regex.Match(Path.GetFileName(y), pattern)
    
                    If xMatch.Success And yMatch.Success Then
                        Dim xInt As Integer = Convert.ToInt32(xMatch.Value)
                        Dim yInt As Integer = Convert.ToInt32(yMatch.Value)
    
                        Return xInt.CompareTo(yInt)
                    Else
                        Return x.CompareTo(y)
                    End If
                End Function
            End Class
        </script>
        <form id="form1" runat="server">
        <script type="text/javascript">
            <%=GetJavaFolderArrays(Server.MapPath("~/"))%>
        </script>
        <div>
    
        </div>
        </form>
    </body>
    </html>
    

    【讨论】:

    • 哇....太棒了...像魅力一样工作...谢谢谢谢谢谢!不敢相信与我正在处理的代码相比,代码看起来如此之少......真的很整洁......非常感谢你:D你让我很开心!只是一件小事......我如何获得另一个名为 adfolders 的 js 数组,其中包含所有父文件夹的名称(即......以'ad_'开头的文件夹) - 我将能够弄清楚这个尽管。谢谢你...可能听起来很愚蠢,但如果有什么可以帮助你的,请告诉我。
    • 有没有办法以编号文件夹按顺序显示的方式对数组进行排序......目前它们显示如下; "1","10","2","3","4","5","6","7","8","9" 如果他们能像这样就好了; "1","2","3","4","5","6","7","8","9","10" 谢谢 :)
    • 天啊.... JAWDROPPER !! ...那是一段整洁的代码:) ...迫不及待想试试看! ... 问:.. 你认为可以构建一个排序器,像 win7 / xp 中的 Windows 资源管理器那样对数组进行排序......按字母顺序和数字顺序?因为当一个目录中也有数字和字母文件夹名称时......这个问题有任何意义吗?非常感谢...这需要我几天才能弄清楚...谢谢!谢谢 !谢谢帕特里克!
    【解决方案2】:

    更新:

    这是添加父文件夹的糟糕尝试... Patricker 已更新他的答案以包含创建父文件夹所需的代码。他的解决方案更整洁/更简单/更易于维护,而且绝对更紧凑!


    只需将以下内容添加到第一个函数的末尾,这将创建名为 adFolders 的 js 数组,其中包含所有父文件夹的名称(即...以“ad_”开头的文件夹)

    谢谢帕特里克!

              'create array for parent folders'
                Dim parray As String = String.Empty
                For Each d As String In adFolders
                    parray +=enter code here String.Format("""{0}"",", Path.GetFileName(d))
                Next
    
                'remove extra ,'
                parray = parray.Trim(",")
                parray = String.Format(dirArray, "adFolders", parray)
                sb.AppendLine(parray)
    
                'return the string builder'
                Return sb.ToString()
    

    【讨论】:

      【解决方案3】:

      帕特里克,

      我问了另一个问题来解决排序问题……通过使用 Josh 在这里的答案中的代码;

      http://stackoverflow.com/questions/3099581
      

      我能够对所有文件夹名称进行排序,例如 Windows 中的资源管理器。效果很好! ...

      Public Class nameSorter
          Implements IComparer(Of String)
      
          Declare Unicode Function StrCmpLogicalW Lib "shlwapi.dll" ( _
              ByVal s1 As String, _
              ByVal s2 As String) As Int32
      
          Public Function Compare(ByVal x As String, ByVal y As String) As Integer Implements System.Collections.Generic.IComparer(Of String).Compare
              Return StrCmpLogicalW(x, y)
          End Function
      
      End Class
      

      上面的这个排序器可以用来像这样对任何数组浏览器样式进行排序;

      Array.Sort(cf, New nameSorter())

      我不确定如果库不可用(例如在 win server 2003 或 xp 及更低版本上)它将如何表现。如果可以检查库是否存在,那就太好了。

      谢谢帕特里克!

      谢谢, 诺曼。

      【讨论】:

        猜你喜欢
        • 2021-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-03
        • 2022-01-11
        • 2017-04-05
        • 2017-05-18
        • 1970-01-01
        相关资源
        最近更新 更多