Sdílet prostřednictvím


VirtualFile Třída

Definice

Představuje objekt souboru ve virtuálním souboru nebo prostoru prostředků.

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
Dědičnost

Příklady

Následující příklad kódu je VirtualFile implementace třídy, která kombinuje informace uložené v objektu DataSet se souborem šablony pro vrácení dat HTML. Tento příklad kódu pracuje s příklady kódu pro VirtualPathProvider třídy a VirtualDirectory k poskytování virtuálních prostředků z úložiště dat, které je načteno do objektu DataSet . Úplné pokyny pro kompilaci a spuštění příkladu najdete v části Příklad v přehledu VirtualPathProvider třídy.

Tento příklad má tři části: implementaci VirtualFile třídy, datový soubor XML použitý k naplnění objektu DataSet a soubor šablony stránky.

První příklad kódu je implementace VirtualFile třídy. Jeho konstruktor používá metodu u vlastního VirtualPathProvider objektu k vrácení objektu DataSet . Pak prohledá objekt a DataSet načte informace přidružené k zadané cestě k virtuálnímu souboru. Open V metodě kombinuje informace z objektu DataSet se souborem šablony a vrátí kombinaci jako Stream objekt.

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

Druhým příkladem je datový soubor XML, který se používá k naplnění objektu DataSet vráceného vlastním VirtualPathProvider objektem. Tato data XML se používají k předvedení použití VirtualPathProvidertříd , VirtualFilea VirtualDirectory k načtení dat z externích dat a nejsou určena k reprezentaci úložiště dat v produkční kvalitě.

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

Třetím příkladem je textový soubor, který se používá jako šablona pro virtuální soubor. Zástupné symboly v souboru jsou reprezentovány textem mezi procenty (%) značkami, například %file% a %content%. Časová razítka slouží k monitorování změn dat virtuálních souborů uložených v mezipaměti.

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

Poznámky

Třída VirtualFile je základní třídou pro objekty, které představují soubory ve virtuálním systému souborů. Obvykle byste implementovali descendent VirtualFile třídy pro každý VirtualPathProvider objekt sestupný ve webové aplikaci.

Poznámky pro implementátory

Když dědíte z VirtualFile třídy, musíte přepsat metodu Open() , aby se datový proud jen pro čtení vrátil do obsahu virtuálního prostředku.

Konstruktory

VirtualFile(String)

Inicializuje novou instanci VirtualFile třídy.

Vlastnosti

IsDirectory

Získá hodnotu, která označuje, že se jedná o virtuální prostředek, který by měl být považován za soubor.

Name

Získá zobrazovaný název virtuálního prostředku.

(Zděděno od VirtualFileBase)
VirtualPath

Získá cestu k virtuálnímu souboru.

(Zděděno od VirtualFileBase)

Metody

CreateObjRef(Type)

Vytvoří objekt, který obsahuje všechny relevantní informace potřebné k vygenerování proxy používaného ke komunikaci se vzdáleným objektem.

(Zděděno od MarshalByRefObject)
Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetLifetimeService()
Zastaralé.

Načte objekt služby aktuální životnosti, který řídí zásady životnosti pro tuto instanci.

(Zděděno od MarshalByRefObject)
GetType()

Získá aktuální Type instanci.

(Zděděno od Object)
InitializeLifetimeService()

VirtualFileBase Poskytuje instanci neomezenou životnost tím, že brání vytvoření zapůjčení.

(Zděděno od VirtualFileBase)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
MemberwiseClone(Boolean)

Vytvoří mělkou kopii aktuálního MarshalByRefObject objektu.

(Zděděno od MarshalByRefObject)
Open()

Při přepsání v odvozené třídě vrátí do virtuálního prostředku datový proud jen pro čtení.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro