Bahasa

VirtualFile Kelas

Definisi

Mewakili objek file dalam file virtual atau ruang sumber daya.

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
Warisan

Contoh

Contoh kode berikut adalah VirtualFile implementasi kelas yang menggabungkan informasi yang DataSet disimpan dalam objek dengan file templat untuk mengembalikan data HTML. Contoh kode ini berfungsi dengan contoh kode untuk VirtualPathProvider kelas dan VirtualDirectory untuk menyediakan sumber daya virtual dari penyimpanan data yang dimuat ke dalam DataSet objek. Untuk instruksi lengkap untuk mengkompilasi dan menjalankan contoh, lihat bagian VirtualPathProvider Contoh dari gambaran umum kelas.

Contoh ini memiliki tiga bagian: VirtualFile implementasi kelas, file data XML yang digunakan untuk mengisi DataSet objek, dan file templat halaman.

Contoh kode pertama adalah implementasi VirtualFile kelas . Konstruktornya menggunakan metode pada objek kustom VirtualPathProvider untuk mengembalikan DataSet objek. Kemudian mencari DataSet objek untuk mengambil informasi yang terkait dengan jalur file virtual yang disediakan. Open Dalam metode , ini menggabungkan informasi dari DataSet objek dengan file templat dan mengembalikan kombinasi sebagai Stream objek.

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

Contoh kedua adalah file data XML yang digunakan untuk mengisi objek yang DataSet dikembalikan oleh objek kustom VirtualPathProvider . Data XML ini digunakan untuk menunjukkan menggunakan VirtualPathProviderkelas , , VirtualFiledan VirtualDirectory untuk mengambil data dari data eksternal, dan tidak dimaksudkan untuk mewakili penyimpanan data berkualitas produksi.

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

Contoh ketiga adalah file teks yang digunakan sebagai templat untuk file virtual. Tempat penampung dalam file diwakili oleh teks di antara persen (%) tanda, seperti %file% dan %content%. Tanda waktu digunakan untuk memantau perubahan pada data file virtual yang di-cache.

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

Keterangan

Kelas VirtualFile adalah kelas dasar untuk objek yang mewakili file dalam sistem file virtual. Biasanya, Anda akan menerapkan turunan VirtualFile kelas untuk setiap VirtualPathProvider keturunan objek di aplikasi Web Anda.

Catatan Bagi Implementer

Saat mewarisi dari VirtualFile kelas , Anda harus mengambil alih Open() metode untuk mengembalikan aliran baca-saja ke konten sumber daya virtual.

Konstruktor

Nama Deskripsi
VirtualFile(String)

Menginisialisasi instans baru dari kelas VirtualFile.

Properti

Nama Deskripsi
IsDirectory

Mendapatkan nilai yang menunjukkan bahwa ini adalah sumber daya virtual yang harus diperlakukan sebagai file.

Name

Mendapatkan nama tampilan sumber daya virtual.

(Diperoleh dari VirtualFileBase)
VirtualPath

Mendapatkan jalur file virtual.

(Diperoleh dari VirtualFileBase)

Metode

Nama Deskripsi
CreateObjRef(Type)

Membuat objek yang berisi semua informasi relevan yang diperlukan untuk menghasilkan proksi yang digunakan untuk berkomunikasi dengan objek jarak jauh.

(Diperoleh dari MarshalByRefObject)
Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetLifetimeService()
Kedaluwarsa.

Mengambil objek layanan seumur hidup saat ini yang mengontrol kebijakan seumur hidup untuk instans ini.

(Diperoleh dari MarshalByRefObject)
GetType()

Mendapatkan Type instans saat ini.

(Diperoleh dari Object)
InitializeLifetimeService()

Memberikan instans VirtualFileBase masa pakai tak terbatas dengan mencegah sewa dibuat.

(Diperoleh dari VirtualFileBase)
MemberwiseClone()

Membuat salinan dangkal dari Objectsaat ini.

(Diperoleh dari Object)
MemberwiseClone(Boolean)

Membuat salinan dangkal objek MarshalByRefObject saat ini.

(Diperoleh dari MarshalByRefObject)
Open()

Saat ditimpa di kelas turunan, mengembalikan aliran baca-saja ke sumber daya virtual.

ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Berlaku untuk