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 コンストラクタ
アセンブリ: System.Web (system.web.dll 内)


VirtualPathProvider カスタム オブジェクトによって提供された DataSet オブジェクトから仮想ファイル情報を取得する VirtualDirectory コンストラクタの実装例を次のコードに示します。この例には、VirtualDirectory インスタンスの設定に使用されるGetData メソッドも含まれています。例の実行に必要なコード全体については、VirtualDirectory クラスの概要で「例」を参照してください。
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
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); } } } }

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 プロパティ

名前 | 説明 | |
---|---|---|
![]() | Children | この仮想ディレクトリに格納されているファイルおよびサブディレクトリのリストを取得します。 |
![]() | Directories | このディレクトリに格納されているすべてのサブディレクトリのリストを取得します。 |
![]() | Files | このディレクトリに格納されているすべてのファイルのリストを取得します。 |
![]() | IsDirectory | ディレクトリとして扱う必要がある仮想リソースであることを示す値を取得します。 |
![]() | Name | 仮想リソースの表示名を取得します。 ( VirtualFileBase から継承されます。) |
![]() | VirtualPath | 仮想ファイルのパスを取得します。 ( VirtualFileBase から継承されます。) |

VirtualDirectory メソッド

名前 | 説明 | |
---|---|---|
![]() | CreateObjRef | リモート オブジェクトとの通信に使用するプロキシの生成に必要な情報をすべて格納しているオブジェクトを作成します。 ( MarshalByRefObject から継承されます。) |
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。) |
![]() | GetLifetimeService | 対象のインスタンスの有効期間ポリシーを制御する、現在の有効期間サービス オブジェクトを取得します。 ( MarshalByRefObject から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
![]() | InitializeLifetimeService | リースが作成されないようにすることで、VirtualFileBase インスタンスに無期限の有効期間を指定します。 ( VirtualFileBase から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 ( Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
![]() | MemberwiseClone | オーバーロードされます。 ( MarshalByRefObject から継承されます。) |

VirtualDirectory メンバ
仮想ファイルまたはリソース領域のディレクトリ オブジェクトを表します。
VirtualDirectory データ型で公開されるメンバを以下の表に示します。


名前 | 説明 | |
---|---|---|
![]() | Children | この仮想ディレクトリに格納されているファイルおよびサブディレクトリのリストを取得します。 |
![]() | Directories | このディレクトリに格納されているすべてのサブディレクトリのリストを取得します。 |
![]() | Files | このディレクトリに格納されているすべてのファイルのリストを取得します。 |
![]() | IsDirectory | ディレクトリとして扱う必要がある仮想リソースであることを示す値を取得します。 |
![]() | Name | 仮想リソースの表示名を取得します。(VirtualFileBase から継承されます。) |
![]() | VirtualPath | 仮想ファイルのパスを取得します。(VirtualFileBase から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | CreateObjRef | リモート オブジェクトとの通信に使用するプロキシの生成に必要な情報をすべて格納しているオブジェクトを作成します。 (MarshalByRefObject から継承されます。) |
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。) |
![]() | GetLifetimeService | 対象のインスタンスの有効期間ポリシーを制御する、現在の有効期間サービス オブジェクトを取得します。 (MarshalByRefObject から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
![]() | InitializeLifetimeService | リースが作成されないようにすることで、VirtualFileBase インスタンスに無期限の有効期間を指定します。 (VirtualFileBase から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 (Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
![]() | MemberwiseClone | オーバーロードされます。 ( MarshalByRefObject から継承されます。) |

- VirtualDirectoryのページへのリンク