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 データVirtualPathProviderVirtualFile、および 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 名前空間



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「VirtualFile クラス」の関連用語

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

   

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



VirtualFile クラスのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

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

©2025 GRAS Group, Inc.RSS