VirtualDirectory Klas

Definitie

Vertegenwoordigt een mapobject in een virtueel bestand of resourceruimte.

public ref class VirtualDirectory abstract : System::Web::Hosting::VirtualFileBase
public abstract class VirtualDirectory : System.Web.Hosting.VirtualFileBase
type VirtualDirectory = class
    inherit VirtualFileBase
Public MustInherit Class VirtualDirectory
Inherits VirtualFileBase
Overname

Voorbeelden

Het volgende codevoorbeeld is een VirtualDirectory klasse-implementatie die virtuele mapgegevens retourneert die zijn opgeslagen in een DataSet object. Deze code werkt met de codevoorbeelden voor de VirtualPathProvider en VirtualFile klassen om virtuele resources te bieden uit een gegevensarchief dat in een DataSet object is geladen. Zie de sectie Voorbeeld van het klassenoverzicht voor de volledige instructies voor het compileren en uitvoeren van het VirtualPathProvider voorbeeld.

Dit voorbeeld bevat twee delen, de VirtualDirectory klasse-implementatie en het XML-gegevensbestand dat wordt gebruikt om het DataSet object te vullen.

Het eerste codevoorbeeld is een implementatie van de VirtualDirectory klasse. In de constructor wordt een methode voor een aangepast VirtualPathProvider object gebruikt om een DataSet object te retourneren. Vervolgens wordt het DataSet object doorzocht om de mapgegevens op te halen die zijn gekoppeld aan het opgegeven virtuele pad.

using System;
using System.Collections;
using System.Data;
using System.Security.Permissions;
using System.Web;
using System.Web.Hosting;

namespace Samples.AspNet.CS
{
  [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
  public class SampleVirtualDirectory : VirtualDirectory
  {
    SamplePathProvider spp;

    private bool exists;
    public bool Exists
    {
      get { return exists; }
    }

    public SampleVirtualDirectory(string virtualDir, SamplePathProvider provider)
      : base(virtualDir)
    {
      spp = provider;
      GetData();
    }

    protected void GetData()
    {
      DataSet ds = spp.GetVirtualData();

      // Clean up the path to match data in resource file.
      string path = VirtualPath.Replace(HostingEnvironment.ApplicationVirtualPath, "");
      path = path.TrimEnd('/');

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

      // If the select returned a row, the directory exists.
      if (rows.Length > 0)
      {
        exists = true;

        // Get 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.
        DataRow[] childRows = dirs.Select(
          String.Format("parentPath = '{0}'", path));

        foreach (DataRow childRow in childRows)
        {
          string childPath = (string)childRow["path"];

          if (childRow["type"].ToString() == "dir")
          {
            SampleVirtualDirectory svd = new SampleVirtualDirectory(childPath, spp);
            children.Add(svd);
            directories.Add(svd);
          }
          else
          {
            SampleVirtualFile svf = new SampleVirtualFile(childPath, spp);
            children.Add(svf);
            files.Add(svf);
          }
        }
      }
    }

    private ArrayList children = new ArrayList();
    public override IEnumerable Children
    {
      get { return children; }
    }

    private ArrayList directories = new ArrayList();
    public override IEnumerable Directories
    {
      get { return directories; }
    }

    private ArrayList files = new ArrayList();
    public override IEnumerable Files
    {
      get { return files; }
    }
  }
}

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

Het tweede voorbeeld is het XML-gegevensbestand dat wordt gebruikt om het DataSet object te vullen dat wordt geretourneerd door het aangepaste VirtualPathProvider object. Deze XML-gegevens worden gebruikt om het gebruik van de VirtualPathProvider, VirtualFileen VirtualDirectory klassen te demonstreren voor het ophalen van gegevens uit externe gegevens en zijn niet bedoeld om een gegevensarchief van productiekwaliteit te vertegenwoordigen.

<?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>

Opmerkingen

De VirtualDirectory klasse is de basisklasse voor objecten die mappen in een virtueel bestandssysteem vertegenwoordigen. Normaal gesproken implementeert u een afstamming van de VirtualDirectory klasse voor elke VirtualPathProvider klasse die afstammt in uw webtoepassing.

Notities voor uitvoerders

Wanneer u de klasse overschrijft VirtualDirectory , moet u de Children, Directoriesen Files eigenschappen overschrijven om een object te retourneren dat de IEnumerable interface implementeert.

Als uw structuur van virtuele mappen gemiddeld tot grote aantallen virtuele resources bevat, moet u ervoor zorgen dat u de gebruikte systeembronnen minimaliseert bij het inventariseren van de virtuele map door de Children, Directoriesof Files eigenschappen aan te roepen.

Constructors

Name Description
VirtualDirectory(String)

Initialiseert een nieuw exemplaar van de VirtualDirectory klasse.

Eigenschappen

Name Description
Children

Hiermee haalt u een lijst op met de bestanden en submappen in deze virtuele map.

Directories

Hiermee haalt u een lijst op met alle submappen in deze map.

Files

Hiermee haalt u een lijst op van alle bestanden in deze map.

IsDirectory

Hiermee wordt een waarde opgehaald die aangeeft dat dit een virtuele resource is die moet worden behandeld als een map.

Name

Hiermee haalt u de weergavenaam van de virtuele resource op.

(Overgenomen van VirtualFileBase)
VirtualPath

Hiermee haalt u het pad naar het virtuele bestand op.

(Overgenomen van VirtualFileBase)

Methoden

Name Description
CreateObjRef(Type)

Hiermee maakt u een object dat alle relevante informatie bevat die nodig is om een proxy te genereren die wordt gebruikt om te communiceren met een extern object.

(Overgenomen van MarshalByRefObject)
Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetLifetimeService()

Hiermee haalt u het huidige levensduurserviceobject op waarmee het levensduurbeleid voor dit exemplaar wordt beheerd.

(Overgenomen van MarshalByRefObject)
GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
InitializeLifetimeService()

Geeft een exemplaar een VirtualFileBase oneindige levensduur door te voorkomen dat een lease wordt gemaakt.

(Overgenomen van VirtualFileBase)
MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
MemberwiseClone(Boolean)

Hiermee maakt u een ondiepe kopie van het huidige MarshalByRefObject object.

(Overgenomen van MarshalByRefObject)
ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)

Van toepassing op

Zie ook