VirtualDirectory VirtualDirectory VirtualDirectory VirtualDirectory Class

定義

仮想ファイルまたはリソース領域のディレクトリ オブジェクトを表します。Represents a directory object in a virtual file or resource space.

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オブジェクトに格納されている仮想ディレクトリ情報を返すクラスの実装です。The following code example is a VirtualDirectory class implementation that returns virtual directory information stored in a DataSet object. このコードでは、クラスVirtualPathProviderVirtualFileクラスのコード例を使用して、 DataSetオブジェクトに読み込まれるデータストアから仮想リソースを提供します。This code works with the code examples for the VirtualPathProvider and VirtualFile classes to provide virtual resources from a data store that is loaded into a DataSet object. 例をコンパイルして実行するための完全な手順については、 VirtualPathProviderクラスの概要の「例」セクションを参照してください。For the complete instructions for compiling and running the example, see the Example section of the VirtualPathProvider class overview.

この例には、 VirtualDirectoryクラスの実装と、オブジェクトのDataSet設定に使用される XML データファイルの2つの部分があります。This example has two parts, the VirtualDirectory class implementation and the XML data file used to populate the DataSet object.

最初のコード例は、 VirtualDirectoryクラスの実装です。The first code example is an implementation of the VirtualDirectory class. コンストラクターでは、カスタムVirtualPathProviderオブジェクトに対してメソッドを使用して、オブジェクトをDataSet返します。In the constructor it uses a method on a custom VirtualPathProvider object to return a DataSet object. 次に、 DataSetオブジェクトを検索して、指定された仮想パスに関連付けられているディレクトリ情報を取得します。It then searches the DataSet object to retrieve the directory information associated with the virtual path provided.

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 Microsoft.VisualBasic

Imports System
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

2番目の例は、カスタムDataSet VirtualPathProviderオブジェクトによって返されるオブジェクトを設定するために使用される XML データファイルです。The second example is the XML data file used to populate the DataSet object returned by the custom VirtualPathProvider object. この XML データは、、、およびVirtualPathProvider VirtualDirectoryの各VirtualFileクラスを使用して外部データからデータを取得する方法を示すために使用されます。これは、実稼働品質のデータストアを表すためのものではありません。This XML data is used to demonstrate using the VirtualPathProvider, VirtualFile, and VirtualDirectory classes to retrieve data from external data, and is not intended to represent a production-quality data store.

<?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クラスは、仮想ファイルシステム内のディレクトリを表すオブジェクトの基本クラスです。The VirtualDirectory class is the base class for objects that represent directories in a virtual file system. 通常は、Web アプリケーションの各VirtualDirectory VirtualPathProviderクラス子孫に対して、クラスの子孫を実装します。Typically, you would implement a descendent of the VirtualDirectory class for each VirtualPathProvider class descendent in your Web application.

注意 (継承者)

VirtualDirectoryクラスから継承する場合はChildren、、 DirectoriesIEnumerableおよびFilesの各プロパティをオーバーライドして、インターフェイスを実装するオブジェクトを返す必要があります。When you inherit from the VirtualDirectory class, you must override the Children, Directories, and Files properties to return an object implementing the IEnumerable interface.

仮想ディレクトリ構造に中程度の数の仮想リソースが含まれている場合はChildren、、 Directories、またはFilesを呼び出して仮想ディレクトリを列挙するときに使用されるシステムリソースを最小限に抑えるように注意する必要があります。プロパティ。If your virtual-directory structure contains moderate to large numbers of virtual resources, you should take care to minimize the system resources consumed when enumerating the virtual directory by calling the Children, Directories, or Files properties.

コンストラクター

VirtualDirectory(String) VirtualDirectory(String) VirtualDirectory(String) VirtualDirectory(String)

VirtualDirectory クラスの新しいインスタンスを初期化します。Initializes a new instance of the VirtualDirectory class.

プロパティ

Children Children Children Children

この仮想ディレクトリに格納されているファイルおよびサブディレクトリのリストを取得します。Gets a list of the files and subdirectories contained in this virtual directory.

Directories Directories Directories Directories

このディレクトリに格納されているすべてのサブディレクトリのリストを取得します。Gets a list of all the subdirectories contained in this directory.

Files Files Files Files

このディレクトリに格納されているすべてのファイルのリストを取得します。Gets a list of all files contained in this directory.

IsDirectory IsDirectory IsDirectory IsDirectory

ディレクトリとして扱う必要がある仮想リソースであることを示す値を取得します。Gets a value that indicates that this is a virtual resource that should be treated as a directory.

Name Name Name Name

仮想リソースの表示名を取得します。Gets the display name of the virtual resource.

(Inherited from VirtualFileBase)
VirtualPath VirtualPath VirtualPath VirtualPath

仮想ファイルのパスを取得します。Gets the virtual file path.

(Inherited from VirtualFileBase)

メソッド

CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type)

リモート オブジェクトとの通信に使用するプロキシの生成に必要な情報をすべて格納しているオブジェクトを作成します。Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Inherited from MarshalByRefObject)
Equals(Object) Equals(Object) Equals(Object) Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(Inherited from Object)
GetLifetimeService() GetLifetimeService() GetLifetimeService() GetLifetimeService()

対象のインスタンスの有効期間ポリシーを制御する、現在の有効期間サービス オブジェクトを取得します。Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Inherited from MarshalByRefObject)
GetType() GetType() GetType() GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(Inherited from Object)
InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService()

リースが作成されないようにすることで、VirtualFileBase インスタンスに無期限の有効期間を指定します。Gives a VirtualFileBase instance an infinite lifetime by preventing a lease from being created.

(Inherited from VirtualFileBase)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(Inherited from Object)
MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean)

現在の MarshalByRefObject オブジェクトの簡易コピーを作成します。Creates a shallow copy of the current MarshalByRefObject object.

(Inherited from MarshalByRefObject)
ToString() ToString() ToString() ToString()

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(Inherited from Object)

適用対象

こちらもご覧ください