LogStore 类 
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示日志结构化的存储区。
public ref class LogStore sealed : IDisposablepublic sealed class LogStore : IDisposabletype LogStore = class
    interface IDisposablePublic NotInheritable Class LogStore
Implements IDisposable- 继承
- 
				LogStore
- 实现
示例
下面的示例演示如何将 LogStore 存档到 XML 文档。
class LogBackup
{
    static void ArchiveToXML(LogStore logStore, string fileName)
    {
        LogArchiveSnapshot snapshot = logStore.CreateLogArchiveSnapshot();
        XmlTextWriter writer = new XmlTextWriter(fileName, Encoding.ASCII);
        writer.WriteStartElement("logArchive");
        foreach(FileRegion region in snapshot.ArchiveRegions)
        {
            writer.WriteStartElement("fileRegion");
            writer.WriteElementString("path", region.Path);
            writer.WriteElementString("length", region.FileLength.ToString());
            writer.WriteElementString("offset", region.Offset.ToString());
            using(Stream dataStream = region.GetStream())
            {
                byte[] data = new byte[dataStream.Length];
                dataStream.Read(data, 0, data.Length);
                writer.WriteElementString("data", Convert.ToBase64String(data));
            }
            writer.WriteEndElement();
        }
        writer.WriteEndElement();
        writer.Close();
        logStore.SetArchiveTail(snapshot.LastSequenceNumber);
    }
    static void RestoreFromXML(string fileName)
    {
        using(XmlTextReader reader = new XmlTextReader(fileName))
        {
            reader.ReadStartElement("logArchive");
            while(reader.IsStartElement())
            {
                string path = reader.ReadElementString("path");
                long length = Int64.Parse(reader.ReadElementString("length"));
                long offset = Int64.Parse(reader.ReadElementString("offset"));
                string dataString = reader.ReadElementString("data");
                byte[] data = Convert.FromBase64String(dataString);
                FileStream fileStream;
                using(fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
                {
                    fileStream.SetLength(length);
                    fileStream.Position = offset; fileStream.Write(data, 0, data.Length);
                }
            }
        reader.ReadEndElement();
        }
    }
}
Friend Class LogBackup
    Private Shared Sub ArchiveToXML(ByVal logStore As LogStore, ByVal fileName As String)
        Dim snapshot As LogArchiveSnapshot = logStore.CreateLogArchiveSnapshot()
        Dim writer As New XmlTextWriter(fileName, Encoding.ASCII)
        writer.WriteStartElement("logArchive")
        For Each region As FileRegion In snapshot.ArchiveRegions
            writer.WriteStartElement("fileRegion")
            writer.WriteElementString("path", region.Path)
            writer.WriteElementString("length", region.FileLength.ToString())
            writer.WriteElementString("offset", region.Offset.ToString())
            Using dataStream As Stream = region.GetStream()
                Dim data(dataStream.Length - 1) As Byte
                dataStream.Read(data, 0, data.Length)
                writer.WriteElementString("data", Convert.ToBase64String(data))
            End Using
            writer.WriteEndElement()
        Next region
        writer.WriteEndElement()
        writer.Close()
        logStore.SetArchiveTail(snapshot.LastSequenceNumber)
    End Sub
    Private Shared Sub RestoreFromXML(ByVal fileName As String)
        Using reader As New XmlTextReader(fileName)
            reader.ReadStartElement("logArchive")
            Do While reader.IsStartElement()
                Dim path = reader.ReadElementString("path")
                Dim length = Int64.Parse(reader.ReadElementString("length"))
                Dim offset = Int64.Parse(reader.ReadElementString("offset"))
                Dim dataString = reader.ReadElementString("data")
                Dim data() = Convert.FromBase64String(dataString)
                Dim fileStream As FileStream
                fileStream = New FileStream(path, FileMode.OpenOrCreate, FileAccess.Write)
                Using fileStream
                    fileStream.SetLength(length)
                    fileStream.Position = offset
                    fileStream.Write(data, 0, data.Length)
                End Using
            Loop
            reader.ReadEndElement()
        End Using
    End Sub
End Class
注解
LogRecordSequence 类提供记录序列接口在公用日志文件系统 (CLFS) 日志之上的实现。 它与 LogStore 类一起使用,该类提供了直接操作和管理 CLFS 日志文件的接口。 日志存储区提供跨一组磁盘范围的仅追加存储区。 LogStore 类表示此存储区,并提供了添加和移除容器、设置策略以及创建存档的方法。 它不提供从存储区中读取和写入存储区的方法;这些方法是由 LogRecordSequence 类提供的。
LogStore 类和 LogRecordSequence 类之间的关系类似于磁盘文件和 FileStream 对象之间的关系。 磁盘文件提供实际存储区,并具有诸如长度和上次访问时间这样的属性,而 FileStream 对象提供文件的视图,利用该视图可以从实际存储区中读取以及向其中写入数据。 与之类似,LogStore 类具有诸如策略和磁盘范围集合这样的属性,LogRecordSequence 类提供面向记录的机制,用于读取和写入数据。
与 FileRecordSequence 类表示的文件记录序列不同,LogStore 实例将其数据存储在 LogExtent 实例表示的磁盘范围的集合中。 给定 LogStore 实例中的所有范围都具有统一的大小,空间以范围增量的形式添加到 LogStore 实例中及从其中移除。 若要添加和移除日志范围,请使用可由 Add 属性返回的 Remove 对象的 LogExtentCollection 和 Extents 方法。
LogStore 实例可以具有与自己关联的策略。 这些策略由 LogPolicy 实例表示,这些实例可由 Policy 属性返回。 策略定义日志应遵循的规则(例如最大范围数和最小大小),以及对在特定条件下扩大或缩小 LogStore 的指令。 此外,还可以指定是否能够存档 LogStore 实例。 策略针对每个日志设置,而且是可变的。这表示,一旦日志的每个句柄都关闭了,策略也就不再存在了。
构造函数
| LogStore(SafeFileHandle) | 为指定的句柄初始化 LogStore 类的新实例。 | 
| LogStore(String, FileMode) | 使用指定的路径和模式初始化 LogStore 类的新实例。 | 
| LogStore(String, FileMode, FileAccess) | 使用指定的路径、模式和访问权限初始化 LogStore 类的新实例。 | 
| LogStore(String, FileMode, FileAccess, FileShare) | 初始化 LogStore 类的新实例。 | 
| LogStore(String, FileMode, FileAccess, FileShare, FileSecurity) | 初始化 LogStore 类的新实例。 | 
属性
| Archivable | 获取指示是否可对 LogStore 实例进行存档的值。 | 
| BaseSequenceNumber | 获取与此 LogStore 实例中有效记录对应的最低序列号。 | 
| Extents | 获取一个日志范围集合,这些日志范围包含此日志存储区的数据。 | 
| FreeBytes | 获取日志存储区中的可用字节数。 | 
| Handle | 获取当前 LogStore 实例封装的日志文件的操作系统文件句柄。 | 
| LastSequenceNumber | 在派生类中被重写时,获取要追加到日志存储区中的下一条记录的序列号。 | 
| Length | 获取日志存储区的大小(以字节为单位)。 | 
| Policy | 获取与此日志存储区关联的策略。 | 
| StreamCount | 获取此日志存储区中日志流的数量。 | 
方法
| CreateLogArchiveSnapshot() | 拍摄日志存储区状态的快照,以制作备份。 | 
| CreateLogArchiveSnapshot(SequenceNumber, SequenceNumber) | 拍摄指定序列号之间的日志存储区状态的快照,以制作备份。 | 
| Delete(String) | 移除日志存储区。 | 
| Dispose() | 释放由 LogStore 使用的所有资源。 | 
| Equals(Object) | 确定指定对象是否等于当前对象。(继承自 Object) | 
| GetHashCode() | 作为默认哈希函数。(继承自 Object) | 
| GetType() | 获取当前实例的 Type。(继承自 Object) | 
| MemberwiseClone() | 创建当前 Object 的浅表副本。(继承自 Object) | 
| SetArchiveTail(SequenceNumber) | 设置存档尾数据的序列号。 | 
| ToString() | 返回表示当前对象的字符串。(继承自 Object) |