VirtualDirectory Classe

Definição

Representa um objeto diretório num espaço virtual de ficheiros ou recursos.

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
Herança

Exemplos

O seguinte exemplo de código é uma VirtualDirectory implementação de classe que devolve informação de diretório virtual armazenada num DataSet objeto. Este código funciona com os exemplos de código para as VirtualPathProvider classes and VirtualFile para fornecer recursos virtuais a partir de um armazenamento de dados que é carregado num DataSet objeto. Para as instruções completas para compilar e executar o exemplo, consulte a secção Exemplo da VirtualPathProvider visão geral da classe.

Este exemplo tem duas partes: a VirtualDirectory implementação da classe e o ficheiro de dados XML usado para preencher o DataSet objeto.

O primeiro exemplo de código é uma implementação da VirtualDirectory classe. No construtor, utiliza um método num objeto personalizado VirtualPathProvider para devolver um DataSet objeto. Depois, pesquisa o DataSet objeto para recuperar a informação do diretório associada ao caminho virtual fornecido.

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

O segundo exemplo é o ficheiro de dados XML usado para preencher o DataSet objeto devolvido pelo objeto personalizado VirtualPathProvider . Estes dados XML são usados para demonstrar o uso das VirtualPathProviderclasses , VirtualFile, e VirtualDirectory para recuperar dados de dados externos, e não se destinam a representar um armazenamento de dados de qualidade de produção.

<?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>

Observações

A VirtualDirectory classe é a classe base para objetos que representam diretórios num sistema de ficheiros virtual. Normalmente, implementarias um descendente da VirtualDirectory classe para cada VirtualPathProvider descendente na tua aplicação Web.

Notas para Implementadores

Quando herdas da VirtualDirectory classe, tens de sobrescrever as Childrenpropriedades , Directories, e Files para devolver um objeto que implementa a IEnumerable interface.

Se a sua estrutura de diretórios virtuais contiver um número moderado a grande de recursos virtuais, deve ter cuidado para minimizar os recursos do sistema consumidos ao enumerar o diretório virtual, chamando as Childrenpropriedades , Directories, ou Files .

Construtores

Name Description
VirtualDirectory(String)

Inicializa uma nova instância da VirtualDirectory classe.

Propriedades

Name Description
Children

Obtém uma lista dos ficheiros e subdiretórios contidos neste diretório virtual.

Directories

Obtém uma lista de todos os subdiretórios contidos neste diretório.

Files

Obtém uma lista de todos os ficheiros contidos neste diretório.

IsDirectory

Recebe um valor que indica que este é um recurso virtual que deve ser tratado como um diretório.

Name

Obtém o nome de exibição do recurso virtual.

(Herdado de VirtualFileBase)
VirtualPath

Obtém o caminho do ficheiro virtual.

(Herdado de VirtualFileBase)

Métodos

Name Description
CreateObjRef(Type)

Cria um objeto que contém toda a informação relevante necessária para gerar um proxy usado para comunicar com um objeto remoto.

(Herdado de MarshalByRefObject)
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetLifetimeService()

Recupera o objeto de serviço de tempo de vida atual que controla a política de vida útil neste caso.

(Herdado de MarshalByRefObject)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
InitializeLifetimeService()

Dá a uma VirtualFileBase instância uma vida útil infinita ao impedir a criação de um arrendamento.

(Herdado de VirtualFileBase)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto atual MarshalByRefObject .

(Herdado de MarshalByRefObject)
ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Ver também