2010-06-21 70 views
0

首先,我是一名平面设计师,所以如果这个编程问题看起来很愚蠢,请忽略......我知道这个问题可能会一直在分裂成两个或三个小问题,但因为我是真正的新的编码VB.NET它会杀了我想放在一起的东西...列出文件夹中的文件夹 - 然后在JS中为每个文件夹创建数组 - ASP.NET VB

目录结构: 我有一个目录结构如下;

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"]; 

请注意,我不知道的号码或文件夹的名称,它们可以在不同的情况不同,我只有根路径。对不起,听起来很愚蠢。

我会appriciate任何帮助任何人都可以提供...我是超级新编程,我google了如何显示文件夹内容在VB.net和代码工作,但无法弄清楚如何创建阵列并仅显示以“ad_”开头的文件夹内的文件夹。

Thankyou soooooo much ... :) ...如果任何人需要任何平面设计/ Photoshop的帮助...我会很高兴;)...只是让我知道。



UPDATE: 没关系......通过google搜索,我知道:

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

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

  3. 伪我想要的东西就像是;

 
declare path 
    if path exists and is not empty then 
    ' get all folders starting with 'ad_' 
    ' if folders starting with 'ad_' are > 0 
    ' loop through all folders starting with 'ad_' 
    ' ' if this folder exists and not empty 
    ' ' get all folders within this folder 
    ' ' create literal control for javascript array named 'this folder's name' 
    ' create literal control for javascript array called 'folders' containing names of all folders starting with 'ad_'. 

回答

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> 
+0

哇.... awsome ...像一个魅力的作品...谢谢你谢谢你谢谢!不能相信代码看起来与我正在工作的东西相比很少....真的很整洁....谢谢你很多:D你做了我的一天! 只是一件小事......我如何获得另一个名为adfolders的js数组与所有父文件夹的名称(即...以'ad_'开头的文件夹) - 我将能够计算出这个尽管如此。感谢一束...听起来很愚蠢,但让我知道,如果有什么我可以帮助你。 – Norman 2010-06-22 08:02:00

+0

有没有一种方法可以按照编号文件夹顺序显示的方式对数组进行排序....目前它们显示的是这样的; “1”,“10”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9” 如果可以的话,像; “1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“10” 谢谢:) – Norman 2010-06-22 12:16:45

+0

OMG .. .. JAWDROPPER !! ...这是一些整洁的代码:) ...不能等待尝试! ... 问:你认为可以建立一个分类器,按win7/xp的顺序排列数组,如Windows资源管理器...按字母和数字排序?因为在一个目录中有数字和字母文件夹名称时......这个问题是否有意义? 非常感谢......这将花费我数天的时间来解决......谢谢!谢谢 !谢谢Patricker! – Norman 2010-06-23 05:12:08

0

更新时间:

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


只需添加以下到第一函数的末尾,这创造了JS数组调用所有的父文件夹的名称adFolders(这是...的文件夹以“ad_”)

谢谢Patricker!

  '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() 
0

Patricker,

我问另外一个问题通过使用代码由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,新nameSorter())

我不知道它将如何在情况下的行为库不可用(如赢Server 2003或XP及以下的。) - 将如果可以为图书馆存在一张支票,这很好。

谢谢Patricker!

谢谢, 诺曼。

相关问题