VirtualFileとは? わかりやすく解説

VirtualFile クラス

メモ : このクラスは、.NET Framework version 2.0 で新しく追加されたものです。

仮想ファイルまたはリソース領域のファイル オブジェクトを表します。

名前空間: System.Web.Hosting
アセンブリ: System.Web (system.web.dll 内)
構文構文

Public MustInherit Class
 VirtualFile
    Inherits VirtualFileBase
public abstract class VirtualFile : VirtualFileBase
public ref class VirtualFile abstract : public
 VirtualFileBase
public abstract class VirtualFile extends VirtualFileBase
public abstract class VirtualFile extends
 VirtualFileBase
解説解説
使用例使用例

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%) で表しています。キャッシュされた仮想ファイル データへの変更を監視するためにタイムスタンプを使用しています。

<html>
  <head>
    <title>File name: %file%</title>
  </head>

  <body>
    <h1>%file%</h1>
    <p>%content%</p>
    <p>Page timestamp: %pageTimestamp%<br>
       Data timestamp: %dataTimestamp%<br>
       Template timestamp: %templateTimestamp%</p>
  </body>
</html>
.NET Framework のセキュリティ.NET Framework のセキュリティ
継承階層継承階層
System.Object
   System.MarshalByRefObject
     System.Web.Hosting.VirtualFileBase
      System.Web.Hosting.VirtualFile
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバの場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
VirtualFile メンバ
System.Web.Hosting 名前空間

VirtualFile コンストラクタ

メモ : このコンストラクタは、.NET Framework version 2.0 で新しく追加されたものです。

VirtualFile クラスの新しいインスタンスを初期化します。

名前空間: System.Web.Hosting
アセンブリ: System.Web (system.web.dll 内)
構文構文

Protected Sub New ( _
    virtualPath As String _
)
Dim virtualPath As String

Dim instance As New VirtualFile(virtualPath)
protected VirtualFile (
    string virtualPath
)
protected:
VirtualFile (
    String^ virtualPath
)
protected VirtualFile (
    String virtualPath
)
protected function VirtualFile (
    virtualPath : String
)

パラメータ

virtualPath

このインスタンスによって表されるリソースへの仮想パス。

使用例使用例

カスタム 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();
  }
}
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
VirtualFile クラス
VirtualFile メンバ
System.Web.Hosting 名前空間

VirtualFile プロパティ


パブリック プロパティパブリック プロパティ

  名前 説明
パブリック プロパティ IsDirectory オーバーライドされます。 ファイルとして扱う必要がある仮想リソースであることを示す値を取得します。
パブリック プロパティ Name  仮想リソースの表示名を取得します。 ( VirtualFileBase から継承されます。)
パブリック プロパティ VirtualPath  仮想ファイルのパスを取得します。 ( VirtualFileBase から継承されます。)
参照参照

関連項目

VirtualFile クラス
System.Web.Hosting 名前空間

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 から継承されます。)
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

VirtualFile クラス
System.Web.Hosting 名前空間

VirtualFile メンバ

仮想ファイルまたはリソース領域のファイル オブジェクトを表します。

VirtualFile データ型で公開されるメンバを以下の表に示します。


プロテクト コンストラクタプロテクト コンストラクタ
  名前 説明
プロテクト メソッド 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 から継承されます。)
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

VirtualFile クラス
System.Web.Hosting 名前空間



英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

「VirtualFile」の関連用語

VirtualFileのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



VirtualFileのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS