VirtualDirectory Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представление объекта каталога в виртуальном файле или пространстве ресурса.
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
- Наследование
Примеры
В следующем примере кода показана VirtualDirectory реализация класса, которая возвращает сведения о виртуальном каталоге, хранящиеся в объекте DataSet . Этот код работает с примерами кода для и VirtualFile классов для VirtualPathProvider предоставления виртуальных ресурсов из хранилища данных, загруженного DataSet в объект. Полные инструкции по компиляции и выполнению примера см. в VirtualPathProvider разделе "Пример" обзора класса.
В этом примере есть две части: VirtualDirectory реализация класса и XML-файл данных, используемый DataSet для заполнения объекта.
Первый пример кода — это реализация VirtualDirectory класса. В конструкторе для возврата объекта используется метод пользовательского VirtualPathProvider DataSet объекта. Затем он выполняет поиск DataSet объекта, чтобы получить сведения о каталоге, связанные с предоставленным виртуальным путем.
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
Второй пример — XML-файл данных, используемый для заполнения DataSet объекта, возвращаемого пользовательским VirtualPathProvider объектом. Эти XML-данные используются для демонстрации VirtualPathProviderVirtualFileиспользования классов и VirtualDirectory классов для извлечения данных из внешних данных и не предназначены для представления хранилища данных производственного качества.
<?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>
Комментарии
Класс VirtualDirectory является базовым классом для объектов, представляющих каталоги в виртуальной файловой системе. Как правило, вы реализуете потомок VirtualDirectory класса для каждого VirtualPathProvider потомка класса в веб-приложении.
Примечания для тех, кто реализует этот метод
При наследовании от VirtualDirectory класса необходимо переопределить ChildrenDirectoriesсвойства и Files свойства, чтобы вернуть объект, реализующий IEnumerable интерфейс.
Если структура виртуального каталога содержит умеренное и большое количество виртуальных ресурсов, необходимо свести к минимуму ресурсы системы, используемые при перечислении виртуального каталога, вызвав ChildrenDirectoriesили Files свойства.
Конструкторы
VirtualDirectory(String) |
Инициализирует новый экземпляр класса VirtualDirectory. |
Свойства
Children |
Получение списка файлов и подкаталогов, содержащихся в виртуальном каталоге. |
Directories |
Получение списка всех подкаталогов, находящихся в данном каталоге. |
Files |
Получение списка всех файлов, находящихся в данном каталоге. |
IsDirectory |
Получение значения, указывающего на виртуальный ресурс, который необходимо рассматривать как каталог. |
Name |
Получает отображаемое имя виртуального ресурса. (Унаследовано от VirtualFileBase) |
VirtualPath |
Получает путь к виртуальному файлу. (Унаследовано от VirtualFileBase) |
Методы
CreateObjRef(Type) |
Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом. (Унаследовано от MarshalByRefObject) |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetLifetimeService() |
Является устаревшей.
Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра. (Унаследовано от MarshalByRefObject) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
InitializeLifetimeService() |
Предоставляет экземпляру VirtualFileBase бесконечное время жизни, предотвращая создание аренды. (Унаследовано от VirtualFileBase) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
MemberwiseClone(Boolean) |
Создает неполную копию текущего объекта MarshalByRefObject. (Унаследовано от MarshalByRefObject) |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |