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


VirtualFile クラスは、仮想ファイル システム内のファイルを表すオブジェクトの基本クラスです。通常、Web アプリケーションの VirtualPathProvider オブジェクトの子孫ごとに VirtualFile クラスの子孫を実装します。
継承時の注意 VirtualFile クラスから継承する場合は、仮想リソースの内容への読み取り専用のストリームを返すように、Open メソッドをオーバーライドする必要があります。
DataSet オブジェクトに格納されている情報をテンプレート ファイルと組み合わせて HTML データを返す VirtualFile クラスを実装する方法を次のコード例に示します。このコード例は、VirtualPathProvider クラスおよび VirtualDirectory クラスのコード例と連携して、DataSet オブジェクトに読み込まれたデータ ストアから仮想リソースを返します。例のコンパイルおよび実行のための手順全体については、VirtualPathProvider クラスの概要で「例」を参照してください。
この例は 3 つの部分で構成されます。最初に、VirtualFile クラスの実装方法を示します。次に、DataSet オブジェクトの設定に使用される XML データ ファイルを示します。最後に、ページのテンプレート ファイルを示します。
最初のコード例では、VirtualFile クラスを実装する方法を示しています。この例のコンストラクタでは、カスタム VirtualPathProvider オブジェクトのメソッドを使用して DataSet オブジェクトを返しています。次に、DataSet オブジェクトを検索して、指定した仮想 ファイル パスに関連付けられた情報を取得します。Open メソッドでは、DataSet オブジェクトからの情報をテンプレート ファイルと組み合わせて、この組み合わせを Stream オブジェクトとして返します。
Imports Microsoft.VisualBasic Imports System Imports System.Data Imports System.IO Imports System.Security.Permissions Imports System.Web Imports System.Web.Caching Imports System.Web.Hosting Namespace Samples.AspNet.VB <AspNetHostingPermission(SecurityAction.Demand, Level:=AspNetHostingPermissionLevel.Minimal), _ AspNetHostingPermission(SecurityAction.InheritanceDemand, level:=AspNetHostingPermissionLevel.Minimal)> _ Public Class SampleVirtualFile Inherits VirtualFile Private content As String Private spp As SamplePathProvider Public ReadOnly Property Exists() As Boolean Get Return (content <> String.Empty) End Get End Property Public Sub New(ByVal virtualPath As String, ByVal provider As SamplePathProvider) MyBase.New(virtualPath) 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 ' Get the virtual file data from the resource table. Dim files As DataTable files = ds.Tables("resource") Dim rows As DataRow() rows = files.Select( _ String.Format("(name='{0}') AND (type='file')", Me.Name)) ' If the select returned a row, store the file contents. If (rows.Length > 0) Then Dim row As DataRow row = rows(0) content = row("content").ToString() End If End Sub Private Function FormatTimeStamp(ByVal time As DateTime) As String Return String.Format("{0} at {1}", _ time.ToLongDateString(), time.ToLongTimeString) End Function Public Overrides Function Open() As System.IO.Stream Dim templateFile As String templateFile = HostingEnvironment.ApplicationPhysicalPath & "App_Data\template.txt" Dim pageTemplate As String Dim now As DateTime now = DateTime.Now ' Try to get the page template out of the cache. pageTemplate = CType(HostingEnvironment.Cache.Get("pageTemplate"), String) If pageTemplate Is Nothing Then ' Get the page template. Try pageTemplate = My.Computer.FileSystem.ReadAllText(templateFile) Catch fileException As Exception Throw fileException End Try ' Set template timestamp. pageTemplate = pageTemplate.Replace("%templateTimestamp%", _ FormatTimeStamp(Now)) ' Make pageTemplate dependent on the template file. Dim cd As CacheDependency cd = New CacheDependency(templateFile) ' Put pageTemplate into cache for maximum of 20 minutes. HostingEnvironment.Cache.Add("pageTemplate", pageTemplate, cd, _ Cache.NoAbsoluteExpiration, _ New TimeSpan(0, 20, 0), _ CacheItemPriority.Default, Nothing) End If ' Put the page data into the template. pageTemplate = pageTemplate.Replace("%file%", Me.Name) pageTemplate = pageTemplate.Replace("%content%", content) ' Get the data timestamp from the cache. Dim dataTimeStamp As DateTime dataTimeStamp = CType(HostingEnvironment.Cache.Get("dataTimeStamp"), DateTime) pageTemplate = pageTemplate.Replace("%dataTimestamp%", _ FormatTimeStamp(dataTimeStamp)) ' Set a timestamp for the page. Dim pageTimeStamp As String pageTimeStamp = FormatTimeStamp(now) pageTemplate = pageTemplate.Replace("%pageTimestamp%", pageTimeStamp) ' Put the page content on the stream. Dim stream As MemoryStream stream = New MemoryStream() Dim writer As StreamWriter writer = New StreamWriter(stream) writer.Write(pageTemplate) writer.Flush() stream.Seek(0, SeekOrigin.Begin) Return stream End Function End Class End Namespace
using System; using System.Data; using System.IO; using System.Security.Permissions; using System.Web; using System.Web.Caching; using System.Web.Hosting; namespace Samples.AspNet.CS { [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] public class SampleVirtualFile : VirtualFile { private string content; private SamplePathProvider spp; public bool Exists { get { return (content != null); } } public SampleVirtualFile(string virtualPath, SamplePathProvider provider) : base(virtualPath) { this.spp = provider; GetData(); } protected void GetData() { // Get the data from the SamplePathProvider DataSet ds = spp.GetVirtualData(); // Get the virtual file from the resource table. DataTable files = ds.Tables["resource"]; DataRow[] rows = files.Select( String.Format("(name = '{0}') AND (type='file')", this.Name)); // If the select returned a row, store the file contents. if (rows.Length > 0) { DataRow row = rows[0]; content = row["content"].ToString(); } } private string FormatTimeStamp(DateTime time) { return String.Format("{0} at {1}", time.ToLongDateString(), time.ToLongTimeString()); } public override Stream Open() { string templateFile = HostingEnvironment.ApplicationPhysicalPath + "App_Data\\template.txt"; string pageTemplate; DateTime now = DateTime.Now; // Try to get the page template out of the cache. pageTemplate = (string)HostingEnvironment.Cache.Get("pageTemplate"); if (pageTemplate == null) { // Get the page template. using (StreamReader reader = new StreamReader(templateFile)) { pageTemplate = reader.ReadToEnd(); } // Set template timestamp pageTemplate = pageTemplate.Replace("%templateTimestamp%", FormatTimeStamp(now)); // Make pageTemplate dependent on the template file. CacheDependency cd = new CacheDependency(templateFile); // Put pageTemplate into cache for maximum of 20 minutes. HostingEnvironment.Cache.Add("pageTemplate", pageTemplate, cd, Cache.NoAbsoluteExpiration, new TimeSpan(0, 20, 0), CacheItemPriority.Default, null); } // Put the page data into the template. pageTemplate = pageTemplate.Replace("%file%", this.Name); pageTemplate = pageTemplate.Replace("%content%", content); // Get the data time stamp from the cache. DateTime dataTimeStamp = (DateTime)HostingEnvironment.Cache.Get("dataTimeStamp"); pageTemplate = pageTemplate.Replace("%dataTimestamp%", FormatTimeStamp(dataTimeStamp)); pageTemplate = pageTemplate.Replace("%pageTimestamp%", FormatTimeStamp(now)); // Put the page content on the stream. Stream stream = new MemoryStream(); StreamWriter writer = new StreamWriter(stream); writer.Write(pageTemplate); writer.Flush(); stream.Seek(0, SeekOrigin.Begin); return stream; } } }
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>
3 番目の例では、仮想ファイルのテンプレートとして使用するテキスト ファイルを示しています。このファイル内のプレースホルダは、パーセント記号 (%) で囲まれたテキスト (たとえば %file% や %content%) で表しています。キャッシュされた仮想ファイル データへの変更を監視するためにタイムスタンプを使用しています。


System.MarshalByRefObject
System.Web.Hosting.VirtualFileBase
System.Web.Hosting.VirtualFile


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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


VirtualFile コンストラクタ
アセンブリ: System.Web (system.web.dll 内)


カスタム VirtualPathProvider オブジェクトによって提供された DataSet オブジェクトから仮想ファイル情報を取得する VirtualFile コンストラクタを実装する方法を次のコード例に示します。例の実行に必要なコード全体については、VirtualFile クラスの概要で「例」を参照してください。
Public Sub New(ByVal virtualPath As String, ByVal provider As SamplePathProvider) MyBase.New(virtualPath) 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 ' Get the virtual file data from the resource table. Dim files As DataTable files = ds.Tables("resource") Dim rows As DataRow() rows = files.Select( _ String.Format("(name='{0}') AND (type='file')", Me.Name)) ' If the select returned a row, store the file contents. If (rows.Length > 0) Then Dim row As DataRow row = rows(0) content = row("content").ToString() End If End Sub
public SampleVirtualFile(string virtualPath, SamplePathProvider provider) : base(virtualPath) { this.spp = provider; GetData(); } protected void GetData() { // Get the data from the SamplePathProvider DataSet ds = spp.GetVirtualData(); // Get the virtual file from the resource table. DataTable files = ds.Tables["resource"]; DataRow[] rows = files.Select( String.Format("(name = '{0}') AND (type='file')", this.Name)); // If the select returned a row, store the file contents. if (rows.Length > 0) { DataRow row = rows[0]; content = row["content"].ToString(); } }

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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


VirtualFile プロパティ

名前 | 説明 | |
---|---|---|
![]() | IsDirectory | オーバーライドされます。 ファイルとして扱う必要がある仮想リソースであることを示す値を取得します。 |
![]() | Name | 仮想リソースの表示名を取得します。 ( VirtualFileBase から継承されます。) |
![]() | VirtualPath | 仮想ファイルのパスを取得します。 ( VirtualFileBase から継承されます。) |

VirtualFile メソッド

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

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

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


名前 | 説明 | |
---|---|---|
![]() | IsDirectory | オーバーライドされます。 ファイルとして扱う必要がある仮想リソースであることを示す値を取得します。 |
![]() | Name | 仮想リソースの表示名を取得します。(VirtualFileBase から継承されます。) |
![]() | VirtualPath | 仮想ファイルのパスを取得します。(VirtualFileBase から継承されます。) |

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

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

Weblioに収録されているすべての辞書からVirtualFileを検索する場合は、下記のリンクをクリックしてください。

- VirtualFileのページへのリンク