Leer en inglés

Compartir a través de


VirtualFile Clase

Definición

Representa un objeto de archivo de un archivo virtual o un espacio de recurso.

public abstract class VirtualFile : System.Web.Hosting.VirtualFileBase
Herencia

Ejemplos

El ejemplo de código siguiente es una VirtualFile implementación de clase que combina información almacenada en un objeto con un DataSet archivo de plantilla para devolver datos HTML. Este ejemplo de código funciona con los ejemplos de código de las VirtualPathProvider clases y VirtualDirectory para proporcionar recursos virtuales de un almacén de datos que se carga en un DataSet objeto . Para obtener las instrucciones completas para compilar y ejecutar el ejemplo, consulte la sección Ejemplo de la información general de la VirtualPathProvider clase.

Este ejemplo tiene tres partes: la implementación de la VirtualFile clase, un archivo de datos XML que se usa para rellenar el DataSet objeto y el archivo de plantilla de página.

El primer ejemplo de código es una implementación de la VirtualFile clase . Su constructor usa un método en un objeto personalizado VirtualPathProvider para devolver un DataSet objeto . A continuación, busca en el DataSet objeto para recuperar la información asociada a la ruta de acceso del archivo virtual proporcionada. En el Open método , combina la información del DataSet objeto con un archivo de plantilla y devuelve la combinación como un Stream objeto .

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

El segundo ejemplo es el archivo de datos XML usado para rellenar el DataSet objeto devuelto por el objeto personalizado VirtualPathProvider . Estos datos XML se usan para demostrar el uso de las VirtualPathProviderclases , VirtualFiley VirtualDirectory para recuperar datos de datos externos y no está pensado para representar un almacén de datos de calidad de producción.

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

El tercer ejemplo es el archivo de texto que se usa como plantilla para el archivo virtual. Los marcadores de posición del archivo se representan mediante texto entre las marcas de porcentaje (%) como %file% y %content%. Las marcas de tiempo se usan para supervisar los cambios en los datos de archivos virtuales almacenados en caché.

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

Comentarios

La VirtualFile clase es la clase base para los objetos que representan archivos en un sistema de archivos virtual. Normalmente, implementaría un descendiente de la VirtualFile clase para cada VirtualPathProvider objeto descendiente de la aplicación web.

Notas a los implementadores

Cuando hereda de la VirtualFile clase , debe invalidar el Open() método para devolver una secuencia de solo lectura al contenido del recurso virtual.

Constructores

VirtualFile(String)

Inicializa una nueva instancia de la clase VirtualFile.

Propiedades

IsDirectory

Obtiene un valor que indica que éste es un recurso virtual que se debería tratar como un archivo.

Name

Obtiene el nombre de presentación del recurso virtual.

(Heredado de VirtualFileBase)
VirtualPath

Obtiene la ruta de acceso del archivo virtual.

(Heredado de VirtualFileBase)

Métodos

CreateObjRef(Type)

Crea un objeto que contiene toda la información relevante necesaria para generar un proxy utilizado para comunicarse con un objeto remoto.

(Heredado de MarshalByRefObject)
Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetLifetimeService()
Obsoletos.

Recupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia.

(Heredado de MarshalByRefObject)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
InitializeLifetimeService()

Concede a una instancia de VirtualFileBase un período de duración infinito ya que impide que se genere una concesión.

(Heredado de VirtualFileBase)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
MemberwiseClone(Boolean)

Crea una copia superficial del objeto MarshalByRefObject actual.

(Heredado de MarshalByRefObject)
Open()

Cuando se reemplaza en una clase derivada, devuelve una secuencia de sólo lectura al recurso virtual.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a

Producto Versiones
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1