VirtualDirectory Klasse

Definition

Stellt ein Verzeichnisobjekt in einem virtuellen Dateiraum oder in einem Ressourcenraum dar.Represents a directory object in a virtual file or resource space.

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
Vererbung

Beispiele

Das folgende Codebeispiel ist eine VirtualDirectory Klassen Implementierung, die Informationen zu virtuellen Verzeichnissen zurückgibt, die in einem-Objekt gespeichert sind DataSet .The following code example is a VirtualDirectory class implementation that returns virtual directory information stored in a DataSet object. Dieser Code funktioniert mit den Codebeispielen für die VirtualPathProvider -Klasse und die- VirtualFile Klasse, um virtuelle Ressourcen aus einem Datenspeicher bereitzustellen, der in ein-Objekt geladen wird DataSet .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. Die umfassenden Anweisungen zum Kompilieren und Ausführen des Beispiels finden Sie im Beispiel Abschnitt der- VirtualPathProvider Klassen Übersicht.For the complete instructions for compiling and running the example, see the Example section of the VirtualPathProvider class overview.

Dieses Beispiel besteht aus zwei Teilen: der VirtualDirectory -Klassen Implementierung und der XML-Datendatei, die zum Auffüllen des-Objekts verwendet wird DataSet .This example has two parts, the VirtualDirectory class implementation and the XML data file used to populate the DataSet object.

Das erste Codebeispiel ist eine Implementierung der- VirtualDirectory Klasse.The first code example is an implementation of the VirtualDirectory class. Im-Konstruktor wird eine-Methode für ein benutzerdefiniertes- VirtualPathProvider Objekt verwendet, um ein-Objekt zurückzugeben DataSet .In the constructor it uses a method on a custom VirtualPathProvider object to return a DataSet object. Anschließend wird das- DataSet Objekt durchsucht, um die dem bereitgestellten virtuellen Pfad zugeordneten Verzeichnisinformationen abzurufen.It then searches the DataSet object to retrieve the directory information associated with the virtual path provided.

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

Das zweite Beispiel ist die XML-Datendatei, die verwendet wird, um das DataSet vom benutzerdefinierten-Objekt zurückgegebene-Objekt aufzufüllen VirtualPathProvider .The second example is the XML data file used to populate the DataSet object returned by the custom VirtualPathProvider object. Diese XML-Daten werden verwendet, um die Verwendung der VirtualPathProvider VirtualFile -,-und- VirtualDirectory Klassen zum Abrufen von Daten aus externen Daten zu veranschaulichen. Sie sind nicht für die Darstellung eines Datenspeicher in Produktionsqualität vorgesehen.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>  

Hinweise

Die- VirtualDirectory Klasse ist die Basisklasse für Objekte, die Verzeichnisse in einem virtuellen Dateisystem darstellen.The VirtualDirectory class is the base class for objects that represent directories in a virtual file system. In der Regel implementieren Sie einen Nachfolger der- VirtualDirectory Klasse für jeden VirtualPathProvider Klassen Nachfolger in Ihrer Webanwendung.Typically, you would implement a descendent of the VirtualDirectory class for each VirtualPathProvider class descendent in your Web application.

Hinweise für Ausführende

Wenn Sie von der- VirtualDirectory Klasse erben, müssen Sie die Children Directories Eigenschaften, und überschreiben, Files um ein Objekt zurückzugeben, das die- IEnumerable Schnittstelle implementiert.When you inherit from the VirtualDirectory class, you must override the Children, Directories, and Files properties to return an object implementing the IEnumerable interface.

Wenn die Struktur des virtuellen Verzeichnisses mittelgroße Zahl von virtuellen Ressourcen enthält, sollten Sie darauf achten, die beim Auflisten des virtuellen Verzeichnisses verbrauchten Systemressourcen zu minimieren, indem Sie Children die Directories Eigenschaften, oder aufrufen Files .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.

Konstruktoren

VirtualDirectory(String)

Initialisiert eine neue Instanz der VirtualDirectory-Klasse.Initializes a new instance of the VirtualDirectory class.

Eigenschaften

Children

Ruft eine Liste der in diesem virtuellen Verzeichnis enthaltenen Dateien und Unterverzeichnisse ab.Gets a list of the files and subdirectories contained in this virtual directory.

Directories

Ruft eine Liste aller in diesem Verzeichnis enthaltenen Unterverzeichnisse ab.Gets a list of all the subdirectories contained in this directory.

Files

Ruft eine Liste aller in diesem Verzeichnis enthaltenen Dateien ab.Gets a list of all files contained in this directory.

IsDirectory

Ruft einen Wert ab, der angibt, dass dies eine virtuelle Ressource ist, die als Verzeichnis behandelt werden soll.Gets a value that indicates that this is a virtual resource that should be treated as a directory.

Name

Ruft den Anzeigenamen der virtuellen Ressource ab.Gets the display name of the virtual resource.

(Geerbt von VirtualFileBase)
VirtualPath

Ruft den virtuellen Dateipfad ab.Gets the virtual file path.

(Geerbt von VirtualFileBase)

Methoden

CreateObjRef(Type)

Erstellt ein Objekt mit allen relevanten Informationen, die zum Generieren eines Proxys für die Kommunikation mit einem Remoteobjekt erforderlich sind.Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Geerbt von MarshalByRefObject)
Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.Determines whether the specified object is equal to the current object.

(Geerbt von Object)
GetHashCode()

Fungiert als Standardhashfunktion.Serves as the default hash function.

(Geerbt von Object)
GetLifetimeService()
Veraltet.

Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinien für diese Instanz steuert.Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Geerbt von MarshalByRefObject)
GetType()

Ruft den Type der aktuellen Instanz ab.Gets the Type of the current instance.

(Geerbt von Object)
InitializeLifetimeService()

Führt zu einer unendlichen Lebensdauer der VirtualFileBase-Instanz, indem das Erstellen eines Lease verhindert wird.Gives a VirtualFileBase instance an infinite lifetime by preventing a lease from being created.

(Geerbt von VirtualFileBase)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.Creates a shallow copy of the current Object.

(Geerbt von Object)
MemberwiseClone(Boolean)

Erstellt eine flache Kopie des aktuellen MarshalByRefObject-Objekts.Creates a shallow copy of the current MarshalByRefObject object.

(Geerbt von MarshalByRefObject)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.Returns a string that represents the current object.

(Geerbt von Object)

Gilt für:

Siehe auch