LogStore Класс

Определение

Представляет хранилище, структурированное журналом.

public ref class LogStore sealed : IDisposable
public sealed class LogStore : IDisposable
type LogStore = class
    interface IDisposable
Public 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)

Применяется к