VirtualDirectory Klass

Definition

Representerar ett katalogobjekt i en virtuell fil eller resursutrymme.

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
Arv

Exempel

Följande kodexempel är en VirtualDirectory klassimplementering som returnerar information om virtuella kataloger som lagras i ett DataSet objekt. Den här koden fungerar med kodexemplen för klasserna och VirtualFile för VirtualPathProvider att tillhandahålla virtuella resurser från ett datalager som läses in i ett DataSet objekt. Fullständiga instruktioner för att kompilera och köra exemplet finns i avsnittet Exempel i klassöversikten VirtualPathProvider .

Det här exemplet innehåller två delar, klassimplementeringen VirtualDirectory och XML-datafilen som används för att fylla i DataSet objektet.

Det första kodexemplet är en implementering av VirtualDirectory klassen. I konstruktorn använder den en metod på ett anpassat VirtualPathProvider objekt för att returnera ett DataSet objekt. Den söker sedan igenom DataSet objektet för att hämta kataloginformationen som är associerad med den virtuella sökvägen.

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

Det andra exemplet är XML-datafilen som används för att fylla i objektet DataSet som returneras av det anpassade VirtualPathProvider objektet. Dessa XML-data används för att demonstrera med hjälp av VirtualPathProviderklasserna , VirtualFileoch VirtualDirectory för att hämta data från externa data och är inte avsett att representera ett datalager av produktionskvalitet.

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

Kommentarer

Klassen VirtualDirectory är basklassen för objekt som representerar kataloger i ett virtuellt filsystem. Vanligtvis implementerar du en fallande VirtualDirectory klass för varje VirtualPathProvider klass som är underordnade i webbprogrammet.

Anteckningar till implementerare

När du ärver från VirtualDirectory klassen måste du åsidosätta Childrenegenskaperna , Directoriesoch Files för att returnera ett objekt som implementerar IEnumerable gränssnittet.

Om din virtual directory-struktur innehåller måttligt till ett stort antal virtuella resurser bör du vara noga med att minimera de systemresurser som förbrukas när du räknar upp den virtuella katalogen genom att anropa Childrenegenskaperna , Directorieseller Files .

Konstruktorer

Name Description
VirtualDirectory(String)

Initierar en ny instans av VirtualDirectory klassen.

Egenskaper

Name Description
Children

Hämtar en lista över de filer och underkataloger som finns i den här virtuella katalogen.

Directories

Hämtar en lista över alla underkataloger som finns i den här katalogen.

Files

Hämtar en lista över alla filer som finns i den här katalogen.

IsDirectory

Hämtar ett värde som anger att det här är en virtuell resurs som ska behandlas som en katalog.

Name

Hämtar visningsnamnet för den virtuella resursen.

(Ärvd från VirtualFileBase)
VirtualPath

Hämtar sökvägen till den virtuella filen.

(Ärvd från VirtualFileBase)

Metoder

Name Description
CreateObjRef(Type)

Skapar ett objekt som innehåller all relevant information som krävs för att generera en proxy som används för att kommunicera med ett fjärrobjekt.

(Ärvd från MarshalByRefObject)
Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetLifetimeService()

Hämtar det aktuella livslängdstjänstobjektet som styr livslängdsprincipen för den här instansen.

(Ärvd från MarshalByRefObject)
GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
InitializeLifetimeService()

Ger en VirtualFileBase instans en oändlig livslängd genom att förhindra att ett lån skapas.

(Ärvd från VirtualFileBase)
MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
MemberwiseClone(Boolean)

Skapar en ytlig kopia av det aktuella MarshalByRefObject objektet.

(Ärvd från MarshalByRefObject)
ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)

Gäller för

Se även