다음을 통해 공유


VirtualFile.Open 메서드

정의

파생 클래스에서 재정의되면 가상 리소스에 대한 읽기 전용 스트림을 반환합니다.

public:
 abstract System::IO::Stream ^ Open();
public abstract System.IO.Stream Open ();
abstract member Open : unit -> System.IO.Stream
Public MustOverride Function Open () As Stream

반환

Stream

가상 파일에 대한 읽기 전용 스트림입니다.

예제

다음 코드 예제는의 구현 된 Open 메서드 템플릿 파일을 사용 하 여 가상 파일에 관한 정보를 결합 하 고 다음 조합을 반환 합니다. 템플릿 파일은 템플릿 파일을 검색 하는 파일 시스템을 여러 번 읽기 오버 헤드를 줄이기 위해 캐시 됩니다. 예제를 실행 하는 데 필요한 전체 코드의 예제 섹션을 참조 하세요.를 VirtualFile 클래스 개요입니다.

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

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

설명

합니다 Open 메서드 여 파일로 처리 하는 데이터를 포함 하는 스트림을 반환 합니다 VirtualPathProvider 클래스입니다. 스트림 읽기 전용인 지 및 검색할 수 있는지 (의 CanSeek 속성은 true).

구현자 참고

파생 클래스에서 메서드는 Open() 검색 가능한 스트림을 반환해야 합니다. 메서드가 검색을 지원하지 않는 스트림을 NotSupportedException 반환하는 경우 스트림이 개체에 HttpResponse 전달되어 데이터를 쓸 때 throw됩니다. 응답이 속성을 읽으 Length 려고 하고 검색할 수 없는 스트림에서 속성에 액세스하려고 하면 예외가 발생하기 때문에 예외가 발생합니다. 자세한 내용은 CanSeek 속성을 참조하세요.

적용 대상