VirtualDirectory Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Představuje objekt adresáře ve virtuálním souboru nebo prostoru prostředku.
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
- Dědičnost
Příklady
Následující příklad kódu je VirtualDirectory implementace třídy, která vrací informace o virtuálním adresáři uložené v objektu DataSet . Tento kód pracuje s příklady kódu pro třídy VirtualPathProvider a VirtualFile poskytuje virtuální prostředky z úložiště dat načteného do objektu DataSet . Úplné pokyny pro kompilaci a spuštění příkladu najdete v části Příklad přehledu VirtualPathProvider třídy.
Tento příklad má dvě části, VirtualDirectory implementaci třídy a datový soubor XML použitý k naplnění objektu DataSet .
První příklad kódu je implementace VirtualDirectory třídy. V konstruktoru používá metodu pro vlastní VirtualPathProvider objekt k vrácení objektu DataSet . Potom vyhledá DataSet objekt a načte informace o adresáři přidružené k zadané virtuální cestě.
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
Druhým příkladem je datový soubor XML použitý k naplnění objektu DataSet vráceného vlastním VirtualPathProvider objektem. Tato data XML slouží k předvedení pomocí VirtualPathProvider, VirtualFilea VirtualDirectory tříd k načtení dat z externích dat a není určena k reprezentaci úložiště dat v produkční kvalitě.
<?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>
Poznámky
Třída VirtualDirectory je základní třída pro objekty, které představují adresáře ve virtuálním systému souborů. Obvykle byste implementovali sestupně třídy VirtualDirectory pro každou VirtualPathProvider třídu sestupně ve webové aplikaci.
Poznámky pro implementátory
Když dědíte z VirtualDirectory třídy, musíte přepsat Children, Directoriesa Files vlastnosti vrátit objekt implementuje IEnumerable rozhraní.
Pokud vaše struktura virtuálního adresáře obsahuje střední až velký počet virtuálních prostředků, měli byste se postarat o minimalizaci systémových prostředků spotřebovaných při vytváření výčtu virtuálního adresáře voláním Children, Directoriesnebo Files vlastností.
Konstruktory
VirtualDirectory(String) |
Inicializuje novou instanci VirtualDirectory třídy. |
Vlastnosti
Children |
Získá seznam souborů a podadresářů obsažených v tomto virtuálním adresáři. |
Directories |
Získá seznam všech podadresářů obsažených v tomto adresáři. |
Files |
Získá seznam všech souborů obsažených v tomto adresáři. |
IsDirectory |
Získá hodnotu, která označuje, že se jedná o virtuální prostředek, který by se měl považovat za adresář. |
Name |
Získá zobrazovaný název virtuálního prostředku. (Zděděno od VirtualFileBase) |
VirtualPath |
Získá cestu k virtuálnímu souboru. (Zděděno od VirtualFileBase) |
Metody
CreateObjRef(Type) |
Vytvoří objekt, který obsahuje všechny relevantní informace potřebné k vygenerování proxy serveru používaného ke komunikaci se vzdáleným objektem. (Zděděno od MarshalByRefObject) |
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
GetLifetimeService() |
Zastaralé.
Načte aktuální objekt služby životnosti, který řídí zásady životnosti pro tuto instanci. (Zděděno od MarshalByRefObject) |
GetType() |
Type Získá aktuální instanci. (Zděděno od Object) |
InitializeLifetimeService() |
Poskytne VirtualFileBase instanci nekonečné životnosti tím, že zabrání vytvoření zapůjčení. (Zděděno od VirtualFileBase) |
MemberwiseClone() |
Vytvoří použádnou kopii aktuálního souboru Object. (Zděděno od Object) |
MemberwiseClone(Boolean) |
Vytvoří kopii aktuálního objektu bez MarshalByRefObject podmět. (Zděděno od MarshalByRefObject) |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |