Export (0) Print
Expand All
0 out of 1 rated this helpful - Rate this topic

VirtualFile Class

Represents a file object in a virtual file or resource space.

Namespace:  System.Web.Hosting
Assembly:  System.Web (in System.Web.dll)
'Declaration
Public MustInherit Class VirtualFile _
	Inherits VirtualFileBase

The VirtualFile type exposes the following members.

  NameDescription
Protected methodVirtualFileInitializes a new instance of the VirtualFile class.
Top
  NameDescription
Public propertyIsDirectoryGets a value that indicates that this is a virtual resource that should be treated as a file. (Overrides VirtualFileBase.IsDirectory.)
Public propertyNameGets the display name of the virtual resource. (Inherited from VirtualFileBase.)
Public propertyVirtualPathGets the virtual file path. (Inherited from VirtualFileBase.)
Top
  NameDescription
Public methodCreateObjRefCreates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object. (Inherited from MarshalByRefObject.)
Public methodEquals(Object)Determines whether the specified object is equal to the current object. (Inherited from Object.)
Protected methodFinalizeAllows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public methodGetHashCodeServes as the default hash function. (Inherited from Object.)
Public methodGetLifetimeServiceRetrieves the current lifetime service object that controls the lifetime policy for this instance. (Inherited from MarshalByRefObject.)
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Public methodInitializeLifetimeServiceGives a VirtualFileBase instance an infinite lifetime by preventing a lease from being created. (Inherited from VirtualFileBase.)
Protected methodMemberwiseCloneCreates a shallow copy of the current Object. (Inherited from Object.)
Protected methodMemberwiseClone(Boolean)Creates a shallow copy of the current MarshalByRefObject object. (Inherited from MarshalByRefObject.)
Public methodOpenWhen overridden in a derived class, returns a read-only stream to the virtual resource.
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)
Top

The VirtualFile class is the base class for objects that represent files in a virtual file system. Typically, you would implement a descendent of the VirtualFile class for each VirtualPathProvider object descendent in your Web application.

Notes to Inheritors

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.

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. 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. For the complete instructions for compiling and running the example, see the Example section of the VirtualPathProvider class overview.

This example has three parts: the VirtualFile class implementation, an XML data file used to populate the DataSet object, and the page template file.

The first code example is an implementation of the VirtualFile class. Its constructor uses a method on a custom VirtualPathProvider object to return a DataSet object. It then searches the DataSet object to retrieve the information associated with the virtual file path provided. In the Open method, it combines the information from the DataSet object with a template file and returns the combination as a Stream object.

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

The second example is the XML data file used to populate the DataSet object returned by the custom VirtualPathProvider object. 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. 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>

.NET Framework

Supported in: 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft. All rights reserved.