VirtualFile Class
Represents a file object in a virtual file or resource space.
Assembly: System.Web (in System.Web.dll)
System.MarshalByRefObject
System.Web.Hosting.VirtualFileBase
System.Web.Hosting.VirtualFile
| Name | Description | |
|---|---|---|
![]() | VirtualFile(String) | Initializes a new instance of the VirtualFile class. |
| Name | Description | |
|---|---|---|
![]() | IsDirectory | Gets a value that indicates that this is a virtual resource that should be treated as a file.(Overrides VirtualFileBase.IsDirectory.) |
![]() | Name | Gets the display name of the virtual resource.(Inherited from VirtualFileBase.) |
![]() | VirtualPath | Gets the virtual file path.(Inherited from VirtualFileBase.) |
| Name | Description | |
|---|---|---|
![]() | CreateObjRef(Type) | Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.(Inherited from MarshalByRefObject.) |
![]() | Equals(Object) | Determines whether the specified object is equal to the current object.(Inherited from Object.) |
![]() | Finalize() | Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.(Inherited from Object.) |
![]() | GetHashCode() | Serves as the default hash function. (Inherited from Object.) |
![]() | GetLifetimeService() | Retrieves the current lifetime service object that controls the lifetime policy for this instance.(Inherited from MarshalByRefObject.) |
![]() | GetType() | |
![]() | InitializeLifetimeService() | Gives a VirtualFileBase instance an infinite lifetime by preventing a lease from being created.(Inherited from VirtualFileBase.) |
![]() | MemberwiseClone() | |
![]() | MemberwiseClone(Boolean) | Creates a shallow copy of the current MarshalByRefObject object.(Inherited from 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.(Inherited from Object.) |
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>
Available since 2.0
Any public static ( Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
.jpeg?cs-save-lang=1&cs-lang=vb)
.jpeg?cs-save-lang=1&cs-lang=vb)
.jpeg?cs-save-lang=1&cs-lang=vb)