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