VirtualDirectory クラス
アセンブリ: System.Web (system.web.dll 内)


VirtualDirectory クラスは、仮想ファイル システム内のディレクトリを表すオブジェクトの基本クラスです。通常、Web アプリケーションの VirtualPathProvider クラスの子孫ごとに VirtualDirectory クラスの子孫を実装します。
継承時の注意 VirtualDirectory クラスから継承する場合は、Children、Directories、および Files の各プロパティをオーバーライドして、IEnumerable インターフェイスを実装するオブジェクトを返す必要があります。 仮想ディレクトリ構造内に適度な数以上の仮想リソースが格納されている場合は、Children、Directories、または Files の各プロパティを呼び出して仮想ディレクトリを列挙するときに消費されるシステム リソースの数を最小限に抑えるように考慮する必要があります。
DataSet オブジェクトに格納されている仮想ディレクトリ情報を返す VirtualDirectory クラスの実装例を次のコードに示します。このコードは、VirtualPathProvider クラスおよび VirtualFile クラスのコード例と連携して、DataSet オブジェクトに読み込まれたデータ ストアから仮想リソースを返します。例のコンパイルおよび実行のための手順全体については、VirtualPathProvider クラスの概要で「例」を参照してください。
この例は、VirtualDirectory クラスの実装と、DataSet オブジェクトの設定に使用される XML データ ファイルという 2 つの部分で構成されます。
最初のコード例では、VirtualDirectory クラスを実装する方法を示しています。この例のコンストラクタでは、VirtualPathProvider カスタム オブジェクトのメソッドを使用して DataSet オブジェクトを返しています。次に、DataSet オブジェクトを検索して、指定した仮想パスに関連付けられたディレクトリ情報を取得します。
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
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; } } }
2 番目の例では、VirtualPathProvider カスタム オブジェクトにより返された DataSet オブジェクトを設定するために使用される XML データ ファイルを示しています。この XML データは VirtualPathProvider、VirtualFile、および 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>

System.MarshalByRefObject
System.Web.Hosting.VirtualFileBase
System.Web.Hosting.VirtualDirectory


Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- VirtualDirectory クラスのページへのリンク