VirtualDirectory Sınıf

Tanım

Sanal dosya veya kaynak alanında bir dizin nesnesini temsil eder.

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
Devralma

Örnekler

Aşağıdaki kod örneği, bir VirtualDirectory nesnede depolanan sanal dizin bilgilerini döndüren bir DataSet sınıf uygulamasıdır. Bu kod, bir nesneye VirtualPathProvider yüklenen DataSet bir veri deposundan sanal kaynaklar sağlamak için ve VirtualFile sınıfları için kod örnekleriyle birlikte çalışır. Örneği derlemeye ve çalıştırmaya yönelik tüm yönergeler için, sınıfa genel bakışın VirtualPathProvider Örnek bölümüne bakın.

Bu örnekte sınıf uygulaması ve nesneyi doldurmak DataSet için kullanılan XML veri dosyası olmak üzere iki bölüm VirtualDirectory vardır.

İlk kod örneği sınıfının bir uygulamasıdır VirtualDirectory . Oluşturucuda, bir nesneyi döndürmek için özel VirtualPathProvider nesne üzerinde bir DataSet yöntem kullanır. Ardından sağlanan sanal yol ile ilişkili dizin bilgilerini almak için nesnesini arar 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

İkinci örnek, özel VirtualPathProvider nesne tarafından döndürülen nesneyi doldurmak DataSet için kullanılan XML veri dosyasıdır. Bu XML verileri, dış verilerden veri almak için , VirtualFileve VirtualDirectory sınıflarını kullanmayı VirtualPathProvidergöstermek için kullanılır ve üretim kalitesinde bir veri depoyu temsil etmek üzere tasarlanmamıştır.

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

Açıklamalar

VirtualDirectory sınıfı, bir sanal dosya sistemindeki dizinleri temsil eden nesneler için temel sınıftır. Genellikle, Web uygulamanızdaki her VirtualPathProvider alt sınıf için sınıfının bir alt VirtualDirectory öğesini uygularsınız.

Uygulayanlara Notlar

sınıfından VirtualDirectory devraldığınızda, arabirimini uygulayan IEnumerable bir nesne döndürmek için , Directoriesve Files özelliklerini geçersiz kılmanız Childrengerekir.

Sanal dizin yapınız orta veya çok sayıda sanal kaynak içeriyorsa, , Directoriesveya Files özelliklerini çağırarak Childrensanal dizini numaralandırırken kullanılan sistem kaynaklarını en aza indirmeye dikkat etmelisiniz.

Oluşturucular

VirtualDirectory(String)

VirtualDirectory sınıfının yeni bir örneğini başlatır.

Özellikler

Children

Bu sanal dizinde yer alan dosyaların ve alt dizinlerin listesini alır.

Directories

Bu dizinde yer alan tüm alt dizinlerin listesini alır.

Files

Bu dizinde yer alan tüm dosyaların listesini alır.

IsDirectory

Bunun bir dizin olarak ele alınması gereken bir sanal kaynak olduğunu belirten bir değer alır.

Name

Sanal kaynağın görünen adını alır.

(Devralındığı yer: VirtualFileBase)
VirtualPath

Sanal dosya yolunu alır.

(Devralındığı yer: VirtualFileBase)

Yöntemler

CreateObjRef(Type)

Uzak bir nesneyle iletişim kurmak için kullanılan bir ara sunucu oluşturmak için gereken tüm ilgili bilgileri içeren bir nesne oluşturur.

(Devralındığı yer: MarshalByRefObject)
Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetLifetimeService()
Kullanımdan kalktı.

Bu örnek için yaşam süresi ilkesini denetleen geçerli yaşam süresi hizmet nesnesini alır.

(Devralındığı yer: MarshalByRefObject)
GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
InitializeLifetimeService()

Bir VirtualFileBase kiralamanın oluşturulmasını önlemek için bir örneğe sonsuz bir yaşam süresi verir.

(Devralındığı yer: VirtualFileBase)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
MemberwiseClone(Boolean)

Geçerli MarshalByRefObject nesnenin sığ bir kopyasını oluşturur.

(Devralındığı yer: MarshalByRefObject)
ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır

Ayrıca bkz.