VirtualDirectory クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
仮想ファイルまたはリソース空間内のディレクトリ オブジェクトを表します。
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 クラスの実装です。 このコードは、 VirtualPathProvider クラスと VirtualFile クラスのコード例と連携して、 DataSet オブジェクトに読み込まれるデータ ストアから仮想リソースを提供します。 この例をコンパイルして実行するための完全な手順については、 VirtualPathProvider クラスの概要の「例」セクションを参照してください。
この例には、 VirtualDirectory クラスの実装と、 DataSet オブジェクトの設定に使用される XML データ ファイルの 2 つの部分があります。
最初のコード例は、 VirtualDirectory クラスの実装です。 コンストラクターでは、カスタム VirtualPathProvider オブジェクトのメソッドを使用して、 DataSet オブジェクトを返します。 次に、 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
2 番目の例は、カスタム DataSet オブジェクトによって返されるVirtualPathProvider オブジェクトを設定するために使用される 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>
注釈
VirtualDirectory クラスは、仮想ファイル システム内のディレクトリを表すオブジェクトの基本クラスです。 通常は、Web アプリケーション内の各VirtualDirectory クラスの子孫に対して、VirtualPathProvider クラスの子孫を実装します。
注意 (実装者)
VirtualDirectory クラスから継承する場合は、Children インターフェイスを実装するオブジェクトを返すために、Directories、Files、およびIEnumerableプロパティをオーバーライドする必要があります。
仮想ディレクトリ構造に中程度から多数の仮想リソースが含まれている場合は、 Children、 Directories、または Files プロパティを呼び出して、仮想ディレクトリを列挙するときに消費されるシステム リソースを最小限に抑えるように注意する必要があります。
コンストラクター
| 名前 | 説明 |
|---|---|
| VirtualDirectory(String) |
VirtualDirectory クラスの新しいインスタンスを初期化します。 |
プロパティ
| 名前 | 説明 |
|---|---|
| Children |
この仮想ディレクトリに含まれるファイルとサブディレクトリの一覧を取得します。 |
| Directories |
このディレクトリに含まれるすべてのサブディレクトリの一覧を取得します。 |
| Files |
このディレクトリに含まれるすべてのファイルの一覧を取得します。 |
| IsDirectory |
これがディレクトリとして扱われる仮想リソースであることを示す値を取得します。 |
| Name |
仮想リソースの表示名を取得します。 (継承元 VirtualFileBase) |
| VirtualPath |
仮想ファイルのパスを取得します。 (継承元 VirtualFileBase) |
メソッド
| 名前 | 説明 |
|---|---|
| CreateObjRef(Type) |
リモート オブジェクトとの通信に使用されるプロキシの生成に必要なすべての関連情報を含むオブジェクトを作成します。 (継承元 MarshalByRefObject) |
| Equals(Object) |
指定したオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
| GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
| GetLifetimeService() |
古い.
このインスタンスの有効期間ポリシーを制御する現在の有効期間サービス オブジェクトを取得します。 (継承元 MarshalByRefObject) |
| GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
| InitializeLifetimeService() |
リースが作成されないようにすることで、 VirtualFileBase インスタンスに無限の有効期間を与えます。 (継承元 VirtualFileBase) |
| MemberwiseClone() |
現在の Objectの簡易コピーを作成します。 (継承元 Object) |
| MemberwiseClone(Boolean) |
現在の MarshalByRefObject オブジェクトの簡易コピーを作成します。 (継承元 MarshalByRefObject) |
| ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |