This documentation is archived and is not being maintained.

VirtualDirectory Class

Represents a directory object in a virtual file or resource space.

Namespace:  System.Web.Hosting
Assembly:  System.Web (in System.Web.dll)

'Declaration
<AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level := AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level := AspNetHostingPermissionLevel.Minimal)> _
Public MustInherit Class VirtualDirectory _
	Inherits VirtualFileBase
'Usage
Dim instance As VirtualDirectory

The VirtualDirectory class is the base class for objects that represent directories in a virtual file system. Typically, you would implement a descendent of the VirtualDirectory class for each VirtualPathProvider class descendent in your Web application.

Notes to Inheritors:

When you inherit from the VirtualDirectory class, you must override the Children, Directories, and Files properties to return an object implementing the IEnumerable interface.

If your virtual-directory structure contains moderate to large numbers of virtual resources, you should take care to minimize the system resources consumed when enumerating the virtual directory by calling the Children, Directories, or Files properties.

The following code example is a VirtualDirectory class implementation that returns virtual directory information stored in a DataSet object. This code works with the code examples for the VirtualPathProvider and VirtualFile classes to provide virtual resources from a data store that is loaded into a DataSet object. For the complete instructions for compiling and running the example, see the Example section of the VirtualPathProvider class overview.

This example has two parts, the VirtualDirectory class implementation and the XML data file used to populate the DataSet object.

The first code example is an implementation of the VirtualDirectory class. In the constructor it uses a method on a custom VirtualPathProvider object to return a DataSet object. It then searches the DataSet object to retrieve the directory information associated with the virtual path provided.

Imports Microsoft.VisualBasic

Imports System
Imports System.Data
Imports System.Collections
Imports System.Security.Permissions
Imports System.Web
Imports System.Web.Hosting


Namespace Samples.AspNet.VB
  <AspNetHostingPermission(SecurityAction.Demand, Level:=AspNetHostingPermissionLevel.Minimal), _
   AspNetHostingPermission(SecurityAction.InheritanceDemand, level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class SampleVirtualDirectory
    Inherits VirtualDirectory

    Private spp As SamplePathProvider

    ' Declare the variable the property uses. 
    Private existsValue As Boolean 

    Public ReadOnly Property exists() As Boolean 
      Get 
        Return existsValue
      End Get 
    End Property 

    Public Sub New(ByVal virtualDir As String, ByVal provider As SamplePathProvider)
      MyBase.New(virtualDir)
      spp = provider
      GetData()
    End Sub 

    Protected Sub GetData()
      ' Get the data from the SamplePathProvider. 
      Dim spp As SamplePathProvider
      spp = CType(HostingEnvironment.VirtualPathProvider, SamplePathProvider)

      Dim ds As DataSet
      ds = spp.GetVirtualData

      ' Clean up the path to match data in resource file. 
      Dim path As String
      path = VirtualPath.Replace(HostingEnvironment.ApplicationVirtualPath, "")
      Dim trimChars() As Char = {"/"c}
      path = path.TrimEnd(trimChars)

      ' Get the virtual directory from the resource table. 
      Dim dirs As DataTable
      dirs = ds.Tables("resource")
      Dim rows As DataRow()
      rows = dirs.Select( _
        String.Format("(name = '{0}') AND (type='dir')", path))

      ' If the select returned a row, the directory exits. 
      If (rows.Length > 0) Then
        existsValue = True 

        ' Get the children from the resource table. 
        ' This technique works for small numbers of virtual resources. 
        '  Sites with moderate to large numbers of virtual 
        '  resources should choose a method that consumes fewer 
        '  computer resources. 
        Dim childRows As DataRow()
        childRows = dirs.Select( _
          String.Format("parentPath = '{0}'", path))

        For Each childRow As DataRow In childRows
          Dim childPath As String
          childPath = CType(childRow("path"), String)

          If (childRow("type").ToString = "dir") Then 
            Dim svd As New SampleVirtualDirectory(childPath, spp)
            childrenValue.Add(svd)
            directoriesValue.Add(svd)
          Else 
            Dim svf As New SampleVirtualFile(childPath, spp)
            childrenValue.Add(svf)
            directoriesValue.Add(svf)
          End If 
        Next 

      End If 
    End Sub 

    Private childrenValue As ArrayList
    Public Overrides ReadOnly Property Children() As System.Collections.IEnumerable
      Get 
        Return childrenValue
      End Get 
    End Property 

    Private directoriesValue As ArrayList
    Public Overrides ReadOnly Property Directories() As System.Collections.IEnumerable
      Get 
        Return directoriesValue
      End Get 
    End Property 

    Private filesValue As ArrayList
    Public Overrides ReadOnly Property Files() As System.Collections.IEnumerable
      Get 
        Return filesValue
      End Get 
    End Property 
  End Class 

End Namespace

The second example is the XML data file used to populate the DataSet object returned by the custom VirtualPathProvider object. This XML data is used to demonstrate using the VirtualPathProvider, VirtualFile, and VirtualDirectory classes to retrieve data from external data, and is not intended to represent a production-quality data store.

<?xml version="1.0" encoding="utf-8" ?>
  <resource type="dir" 
    path="/vrDir" 
    parentPath="" 
    content="">
    <resource type="file" 
      path="/vrDir/Level1FileA.vrf"
      parentPath="/vrDir" 
      content="This is the content of file Level1FileA." >
    </resource>
    <resource type="file" 
      path="/vrDir/Level1FileB.vrf"
      parentPath="/vrDir" 
      content="This is the content of file Level1FileB.">
    </resource>
    <resource type="dir" 
      path="/vrDir/Level2DirA" 
      parentPath="/vrDir" 
      content="">
        <resource type="file" 
          path="/vrDir/Level2DirA/Level2FileA.vrf" 
          parentPath="/vrDir/Level2DirA" 
          content="This is the content of file Level2FileA." >
        </resource>
        <resource type="file" 
          path="/vrDir/Level2DirA/Level2FileB.vrf"
          parentPath="/vrDir/Level2DirA" 
          content="This is the content of file Level2FileB.">
        </resource>
    </resource>
    <resource type="dir" 
      path="/vrDir/Level2DirB" 
      parentPath="/vrDir" 
      content="">
      <resource type="file" 
        path="/vrDir/Level2DirB/Level2FileA.vrf" 
        parentPath="/vrDir/Level2DirB" 
        content="This is the content of file Level2FileA." >
      </resource>
      <resource type="file" 
        path="/vrDir/Level2DirB/Level2FileB.vrf"
        parentPath="/vrDir/Level2DirB" 
        content="This is the content of file Level2FileB.">
       </resource>
    </resource>
  </resource>

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5, 3.0, 2.0
Show: