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 . Этот код работает с примерами кода для и VirtualPathProvider классов для VirtualFile предоставления виртуальных ресурсов из хранилища данных, загруженного в 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-данные используются для демонстрации использования VirtualPathProviderи VirtualFileVirtualDirectory классов для извлечения данных из внешних данных и не предназначены для представления хранилища данных с качеством рабочей среды.

<?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 интерфейс.

Если структура виртуального каталога содержит умеренное количество виртуальных ресурсов, необходимо свести к минимуму системные ресурсы, используемые при перечислении виртуального каталога, вызвав ChildrenDirectoriesFiles или свойства.

Конструкторы

Имя Описание
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)

Применяется к

См. также раздел