2009-07-11 4 views
0

Webサーバー上のファイルディレクトリを参照できるようにするページを設定しようとしています。ディレクトリビューではなく、Webアドレスへのツリービューマップファイル

目的は、ユーザーが特定のディレクトリ構造内にファイルをドロップできるようにすることで、コードはディレクトリに基づいてツリービューを作成します。

Nodes Navigate URLを設定すると、C:\ Staging \ Filesにマップされます。このファイルはWeb上では機能しません。私はあなたが逆のアプローチをとるべきだと思う問題のあるコードが

Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load 


    If Not Page.IsPostBack Then 
     ' 
     Dim rootDir As New DirectoryInfo("C:\Staging\") 
     ' Enter the RecurseNodes function to recursively walk the directory tree. 
     Dim RootNode As TreeNode = RecurseNodes(rootDir) 
     ' Add this Node hierarchy to the TreeNode control. 
     Treeview1.Nodes.Add(RootNode) 
    End If 
End Sub 

Private Function RecurseNodes(ByVal thisDir As DirectoryInfo) As TreeNode 


    Dim thisDirNode As New TreeNode(thisDir.Name, Nothing) 
    ' Get all the subdirectories in this Directory. 
    Dim subDirs As DirectoryInfo() = thisDir.GetDirectories() 
    For Each subDir As DirectoryInfo In subDirs 
     thisDirNode.ChildNodes.Add(RecurseNodes(subDir)) 
    Next 
    ' Now get the files in this Directory. 
    Dim files As FileInfo() = thisDir.GetFiles() 
    For Each file As FileInfo In files 
     Dim thisFileNode As New TreeNode(file.Name, Nothing) 
     **thisFileNode.NavigateUrl = file.FullName** 
     thisDirNode.ChildNodes.Add(thisFileNode) 
    Next 
    Return thisDirNode 
End Function 

答えて

1

です。ここ

など http://webaddress/staging/filesにマッピングする必要があります。むしろ、ディスク上の物理パスの内容を取得するよりも、仮想パスの内容がベースURLとそれを組み合わせるつかむために Server.MapPathを使用してみてください:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Not Page.IsPostBack Then 
     Dim RootNode As TreeNode = RecurseNodes("~/files") 
     TreeView1.Nodes.Add(RootNode) 
    End If 
End Sub 

Private Overloads Function RecurseNodes(ByVal virtualPath As String) As TreeNode 
    If Not VirtualPathUtility.IsAbsolute(virtualPath) Then virtualPath = VirtualPathUtility.ToAbsolute(virtualPath) 
    virtualPath = VirtualPathUtility.RemoveTrailingSlash(virtualPath) 
    Dim baseUrl As String = Request.Url.GetLeftPart(UriPartial.Authority) + virtualPath 
    Return RecurseNodes(New DirectoryInfo(Server.MapPath(virtualPath)), baseUrl) 
End Function 

Private Overloads Function RecurseNodes(ByVal thisDir As DirectoryInfo, ByVal baseUrl As String) As TreeNode 
    Dim thisDirNode As New TreeNode(thisDir.Name, Nothing) 
    Dim subDirs As DirectoryInfo() = thisDir.GetDirectories() 
    For Each subDir As DirectoryInfo In subDirs 
     thisDirNode.ChildNodes.Add(RecurseNodes(subDir, baseUrl + subDir.Name + "/")) 
    Next 
    Dim files As FileInfo() = thisDir.GetFiles() 
    For Each file As FileInfo In files 
     Dim thisFileNode As New TreeNode(file.Name, Nothing) 
     thisFileNode.NavigateUrl = baseUrl + file.Name 
     thisDirNode.ChildNodes.Add(thisFileNode) 
    Next 
    Return thisDirNode 
End Function 
+0

あなたは私にこれがどのように動作するかの例を挙げてもらえますか? –

関連する問題