VirtualFile 클래스

정의

가상 파일 또는 리소스 공간의 파일 개체를 나타냅니다.Represents a file object in a virtual file or resource space.

public ref class VirtualFile abstract : System::Web::Hosting::VirtualFileBase
public abstract class VirtualFile : System.Web.Hosting.VirtualFileBase
type VirtualFile = class
    inherit VirtualFileBase
Public MustInherit Class VirtualFile
Inherits VirtualFileBase
상속

예제

다음 코드 예제는 VirtualFile 에 저장 된 정보를 결합 하는 클래스 구현을 DataSet HTML 데이터를 반환 하는 템플릿 파일을 사용 하 여 개체입니다.The following code example is a VirtualFile class implementation that combines information stored in a DataSet object with a template file to return HTML data. 이 코드 예제에 대 한 코드 예제를 사용 하 여 작동는 VirtualPathProviderVirtualDirectory 되는 데이터에서 가상 리소스 저장소를 제공 하는 클래스에 로드 되는 DataSet 개체.This code example works with the code examples for the VirtualPathProvider and VirtualDirectory classes to provide virtual resources from a data store that is loaded into a DataSet object. 컴파일 및 예제를 실행 하는 것에 대 한 전체 지침의 예 섹션을 참조 합니다 VirtualPathProvider 클래스 개요입니다.For the complete instructions for compiling and running the example, see the Example section of the VirtualPathProvider class overview.

이 예제는 세 부분: 합니다 VirtualFile 클래스 구현에서는 XML 데이터 파일을 채우는 데 사용 합니다 DataSet 개체 및 페이지 템플릿 파일입니다.This example has three parts: the VirtualFile class implementation, an XML data file used to populate the DataSet object, and the page template file.

첫 번째 코드 예제는 구현의 VirtualFile 클래스입니다.The first code example is an implementation of the VirtualFile class. 해당 생성자 메서드를 사용 하 여 사용자 지정 VirtualPathProvider 반환할 개체는 DataSet 개체입니다.Its constructor uses a method on a custom VirtualPathProvider object to return a DataSet object. 그런 다음 검색을 DataSet 제공 된 가상 파일 경로와 관련 된 정보를 검색할 개체입니다.It then searches the DataSet object to retrieve the information associated with the virtual file path provided. Open 에서 정보를 결합 메서드를 실행 하는 DataSet 템플릿 파일을 사용 하 여 개체 조합을으로 반환 합니다를 Stream 개체.In the Open method, it combines the information from the DataSet object with a template file and returns the combination as a Stream object.

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;
    }
  }
}

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

두 번째 예제는 XML 데이터 파일을 채우는 데 사용 합니다 DataSet 사용자 지정 하 여 반환 되는 개체 VirtualPathProvider 개체입니다.The second example is the XML data file used to populate the DataSet object returned by the custom VirtualPathProvider object. 이 XML 데이터를 사용 하 여 설명 하기 위해 사용 되는 VirtualPathProvider, VirtualFile, 및 VirtualDirectory 클래스를 외부 데이터에서 데이터를 검색 하며 프로덕션 수준의 데이터 저장소를 나타내는 데 적합 하지 않습니다.This XML data is used to demonstrate using the VirtualPathProvider, VirtualFile, and VirtualDirectory classes to retrieve data from external data, and is not intended to represent a production-quality data store.

<?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>  

세 번째 예제에 가상 파일에 대 한 템플릿으로 사용 되는 텍스트 파일입니다.The third example is the text file used as a template for the virtual file. 파일에서 자리 표시자 백분율 (%) 표시 사이 텍스트와 같은 표시 됩니다 %file%%content%입니다.Placeholders in the file are represented by text between percent (%) marks, such as %file% and %content%. 타임 스탬프는 캐시 된 가상 파일 데이터의 변경 내용을 모니터링 하는 데 사용 됩니다.Timestamps are used to monitor changes to cached virtual file data.

<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>  

설명

VirtualFile 클래스는 기본 클래스 가상 파일 시스템에서 파일을 나타내는 개체입니다.The VirtualFile class is the base class for objects that represent files in a virtual file system. 일반적으로 하위 항목의 구현 하는 합니다 VirtualFile 각각에 대 한 클래스 VirtualPathProvider 웹 애플리케이션에서 하위 개체입니다.Typically, you would implement a descendent of the VirtualFile class for each VirtualPathProvider object descendent in your Web application.

상속자 참고

VirtualFile 클래스에서 상속 하는 경우 메서드를 Open() 재정의 하 여 가상 리소스의 내용에 대 한 읽기 전용 스트림을 반환 해야 합니다.When you inherit from the VirtualFile class, you must override the Open() method to return a read-only stream to the contents of the virtual resource.

생성자

VirtualFile(String)

VirtualFile 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the VirtualFile class.

속성

IsDirectory

이 항목이 파일로 처리할 가상 디렉터리임을 나타내는 값을 가져옵니다.Gets a value that indicates that this is a virtual resource that should be treated as a file.

Name

가상 리소스의 표시 이름을 가져옵니다.Gets the display name of the virtual resource.

(다음에서 상속됨 VirtualFileBase)
VirtualPath

가상 파일 경로를 가져옵니다.Gets the virtual file path.

(다음에서 상속됨 VirtualFileBase)

메서드

CreateObjRef(Type)

원격 개체와 통신하는 데 사용되는 프록시 생성에 필요한 모든 관련 정보가 들어 있는 개체를 만듭니다.Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(다음에서 상속됨 MarshalByRefObject)
Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object.

(다음에서 상속됨 Object)
GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(다음에서 상속됨 Object)
GetLifetimeService()

이 인스턴스의 수명 정책을 제어하는 현재의 수명 서비스 개체를 검색합니다.Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(다음에서 상속됨 MarshalByRefObject)
GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(다음에서 상속됨 Object)
InitializeLifetimeService()

임대가 만들어지는 것을 방지하여 VirtualFileBase 인스턴스에 영구 수명을 제공합니다.Gives a VirtualFileBase instance an infinite lifetime by preventing a lease from being created.

(다음에서 상속됨 VirtualFileBase)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
MemberwiseClone(Boolean)

현재 MarshalByRefObject 개체의 단순 복사본을 만듭니다.Creates a shallow copy of the current MarshalByRefObject object.

(다음에서 상속됨 MarshalByRefObject)
Open()

파생 클래스에서 재정의되면 가상 리소스에 대한 읽기 전용 스트림을 반환합니다.When overridden in a derived class, returns a read-only stream to the virtual resource.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(다음에서 상속됨 Object)

적용 대상