VirtualFile Klasse

Definition

Stellt ein Dateiobjekt in einem virtuellen Dateiraum oder in einem virtuellen Ressourcenraum dar.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
Vererbung

Beispiele

Das folgende Codebeispiel ist eine VirtualFile Klassen Implementierung, die in einem-Objekt gespeicherte Informationen DataSet mit einer Vorlagen Datei kombiniert, um HTML-Daten zurückzugeben.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. Dieses Codebeispiel verwendet die Codebeispiele für die VirtualPathProvider -Klasse und die- VirtualDirectory Klasse, um virtuelle Ressourcen aus einem Datenspeicher bereitzustellen, der in ein-Objekt geladen wird 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. Die umfassenden Anweisungen zum Kompilieren und Ausführen des Beispiels finden Sie im Beispiel Abschnitt der- VirtualPathProvider Klassen Übersicht.For the complete instructions for compiling and running the example, see the Example section of the VirtualPathProvider class overview.

Dieses Beispiel besteht aus drei Teilen: der VirtualFile -Klassen Implementierung, einer XML-Datendatei, die zum Auffüllen des DataSet -Objekts verwendet wird, und der Seitenvorlagen Datei.This example has three parts: the VirtualFile class implementation, an XML data file used to populate the DataSet object, and the page template file.

Das erste Codebeispiel ist eine Implementierung der- VirtualFile Klasse.The first code example is an implementation of the VirtualFile class. Der Konstruktor verwendet eine-Methode für ein benutzerdefiniertes- VirtualPathProvider Objekt, um ein-Objekt zurückzugeben DataSet .Its constructor uses a method on a custom VirtualPathProvider object to return a DataSet object. Anschließend wird das- DataSet Objekt durchsucht, um die Informationen abzurufen, die dem bereitgestellten virtuellen Dateipfad zugeordnet sind.It then searches the DataSet object to retrieve the information associated with the virtual file path provided. In der Open -Methode werden die Informationen aus dem- DataSet Objekt mit einer Vorlagen Datei kombiniert, und die Kombination wird als-Objekt zurückgegeben 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

Das zweite Beispiel ist die XML-Datendatei, die verwendet wird, um das DataSet vom benutzerdefinierten-Objekt zurückgegebene-Objekt aufzufüllen VirtualPathProvider .The second example is the XML data file used to populate the DataSet object returned by the custom VirtualPathProvider object. Diese XML-Daten werden verwendet, um die Verwendung der VirtualPathProvider VirtualFile -,-und- VirtualDirectory Klassen zum Abrufen von Daten aus externen Daten zu veranschaulichen. Sie sind nicht für die Darstellung eines Datenspeicher in Produktionsqualität vorgesehen.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>  

Das dritte Beispiel ist die Textdatei, die als Vorlage für die virtuelle Datei verwendet wird.The third example is the text file used as a template for the virtual file. Platzhalter in der Datei werden durch Text zwischen Prozent (%) dargestellt. Markierungen, z %file% . b %content% . und.Placeholders in the file are represented by text between percent (%) marks, such as %file% and %content%. Zeitstempel werden verwendet, um Änderungen an zwischengespeicherten virtuellen Datei Daten zu überwachen.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>  

Hinweise

Die- VirtualFile Klasse ist die Basisklasse für Objekte, die Dateien in einem virtuellen Dateisystem darstellen.The VirtualFile class is the base class for objects that represent files in a virtual file system. In der Regel implementieren Sie einen Nachfolger der- VirtualFile Klasse für jeden VirtualPathProvider Objekt Nachfolger in Ihrer Webanwendung.Typically, you would implement a descendent of the VirtualFile class for each VirtualPathProvider object descendent in your Web application.

Hinweise für Ausführende

Wenn Sie von der- VirtualFile Klasse erben, müssen Sie die-Methode überschreiben, um einen schreibgeschützten Daten Open() Strom an den Inhalt der virtuellen Ressource zurückzugeben.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.

Konstruktoren

VirtualFile(String)

Initialisiert eine neue Instanz der VirtualFile-Klasse.Initializes a new instance of the VirtualFile class.

Eigenschaften

IsDirectory

Ruft einen Wert ab, der anzeigt, dass dies eine virtuelle Ressource ist, die als Datei behandelt werden soll.Gets a value that indicates that this is a virtual resource that should be treated as a file.

Name

Ruft den Anzeigenamen der virtuellen Ressource ab.Gets the display name of the virtual resource.

(Geerbt von VirtualFileBase)
VirtualPath

Ruft den virtuellen Dateipfad ab.Gets the virtual file path.

(Geerbt von VirtualFileBase)

Methoden

CreateObjRef(Type)

Erstellt ein Objekt mit allen relevanten Informationen, die zum Generieren eines Proxys für die Kommunikation mit einem Remoteobjekt erforderlich sind.Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Geerbt von MarshalByRefObject)
Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.Determines whether the specified object is equal to the current object.

(Geerbt von Object)
GetHashCode()

Fungiert als Standardhashfunktion.Serves as the default hash function.

(Geerbt von Object)
GetLifetimeService()
Veraltet.

Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinien für diese Instanz steuert.Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Geerbt von MarshalByRefObject)
GetType()

Ruft den Type der aktuellen Instanz ab.Gets the Type of the current instance.

(Geerbt von Object)
InitializeLifetimeService()

Führt zu einer unendlichen Lebensdauer der VirtualFileBase-Instanz, indem das Erstellen eines Lease verhindert wird.Gives a VirtualFileBase instance an infinite lifetime by preventing a lease from being created.

(Geerbt von VirtualFileBase)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.Creates a shallow copy of the current Object.

(Geerbt von Object)
MemberwiseClone(Boolean)

Erstellt eine flache Kopie des aktuellen MarshalByRefObject-Objekts.Creates a shallow copy of the current MarshalByRefObject object.

(Geerbt von MarshalByRefObject)
Open()

Gibt beim Überschreiben in einer abgeleiteten Klasse einen schreibgeschützten Stream zur virtuellen Ressource zurück.When overridden in a derived class, returns a read-only stream to the virtual resource.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.Returns a string that represents the current object.

(Geerbt von Object)

Gilt für: