VirtualDirectory Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt ein Verzeichnisobjekt in einem virtuellen Dateiraum oder in einem Ressourcenraum dar.
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 Klassenimplementierung, die virtuelle Verzeichnisinformationen zurückgibt, die in einem DataSet Objekt gespeichert sind. Dieser Code funktioniert mit den Codebeispielen für die VirtualPathProvider und VirtualFile Klassen, um virtuelle Ressourcen aus einem Datenspeicher bereitzustellen, der in ein DataSet Objekt geladen wird. Die vollständigen Anweisungen zum Kompilieren und Ausführen des Beispiels finden Sie im Abschnitt "Beispiel" der VirtualPathProvider Klassenübersicht.
In diesem Beispiel werden zwei Teile, die VirtualDirectory Klassenimplementierung und die XML-Datendatei verwendet, um das DataSet Objekt aufzufüllen.
Das erste Codebeispiel ist eine Implementierung der VirtualDirectory Klasse. Im Konstruktor wird eine Methode für ein benutzerdefiniertes VirtualPathProvider Objekt verwendet, um ein DataSet Objekt zurückzugeben. Anschließend wird das DataSet Objekt durchsucht, um die Verzeichnisinformationen abzurufen, die dem bereitgestellten virtuellen Pfad zugeordnet sind.
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 zum Auffüllen des DataSet vom benutzerdefinierten VirtualPathProvider Objekt zurückgegebenen Objekts verwendet wird. Diese XML-Daten werden verwendet, um die Verwendung der Klassen VirtualFileund VirtualDirectory der VirtualPathProviderKlassen zum Abrufen von Daten aus externen Daten zu veranschaulichen und ist nicht für die Darstellung eines Produktionsqualitätsdatenspeichers vorgesehen.
<?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. Normalerweise würden Sie eine absteigend von der VirtualDirectory Klasse für jede VirtualPathProvider Absteigendklasse in Ihrer Webanwendung implementieren.
Hinweise für Ausführende
Wenn Sie von der VirtualDirectory Klasse erben, müssen Sie die Eigenschaften Directoriesund Files eigenschaften Childrenaußer Kraft setzen, um ein Objekt zurückzugeben, das die IEnumerable Schnittstelle implementiert.
Wenn Ihre virtuelle Verzeichnisstruktur eine moderate bis große Anzahl virtueller Ressourcen enthält, sollten Sie die Systemressourcen minimieren, die beim Aufzählen des virtuellen Verzeichnisses durch Aufrufen der Children, Directoriesoder Files Eigenschaften verbraucht werden.
Konstruktoren
VirtualDirectory(String) |
Initialisiert eine neue Instanz der VirtualDirectory-Klasse. |
Eigenschaften
Children |
Ruft eine Liste der in diesem virtuellen Verzeichnis enthaltenen Dateien und Unterverzeichnisse ab. |
Directories |
Ruft eine Liste aller in diesem Verzeichnis enthaltenen Unterverzeichnisse ab. |
Files |
Ruft eine Liste aller in diesem Verzeichnis enthaltenen Dateien ab. |
IsDirectory |
Ruft einen Wert ab, der angibt, dass dies eine virtuelle Ressource ist, die als Verzeichnis behandelt werden soll. |
Name |
Ruft den Anzeigenamen der virtuellen Ressource ab. (Geerbt von VirtualFileBase) |
VirtualPath |
Ruft den virtuellen Dateipfad ab. (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. (Geerbt von MarshalByRefObject) |
Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
GetHashCode() |
Fungiert als Standardhashfunktion. (Geerbt von Object) |
GetLifetimeService() |
Veraltet.
Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinien für diese Instanz steuert. (Geerbt von MarshalByRefObject) |
GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
InitializeLifetimeService() |
Führt zu einer unendlichen Lebensdauer der VirtualFileBase-Instanz, indem das Erstellen eines Lease verhindert wird. (Geerbt von VirtualFileBase) |
MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
MemberwiseClone(Boolean) |
Erstellt eine flache Kopie des aktuellen MarshalByRefObject-Objekts. (Geerbt von MarshalByRefObject) |
ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |