VirtualFile.Open Method

When overridden in a derived class, returns a read-only stream to the virtual resource.

Namespace: System.Web.Hosting
Assembly: System.Web (in system.web.dll)

public abstract Stream Open ()
public abstract Stream Open ()
public abstract function Open () : Stream
Not applicable.

Return Value

A read-only stream to the virtual file.

The Open method returns a stream containing the data treated as a file by the VirtualPathProvider class. The stream is read-only, and can be seekable.

Notes to Inheritors: The Open method is not required to return a seekable stream.

The following code example is an implementation of the Open method that combines virtual-file-specific information with a template file and then returns the combination. The template file is cached to reduce the overhead of reading the file system multiple times to retrieve the template file. For the full code required to run the example, see the Example section of the VirtualFile class overview.

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%", 

    // 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,
      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%", 
  pageTemplate = pageTemplate.Replace("%pageTimestamp%", 

  // Put the page content on the stream.
  Stream stream = new MemoryStream();
  StreamWriter writer = new StreamWriter(stream);

  stream.Seek(0, SeekOrigin.Begin);

  return stream;

Windows 98, Windows Server 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.

.NET Framework

Supported in: 3.0, 2.0