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 предоставляет реализацию интерфейса последовательности записей поверх журнала Common Log File System (CLFS). Он работает с LogStore классом, который предоставляет интерфейс для непосредственного управления файлом журнала CLFS и управления им. Хранилище журналов предоставляет хранилище только для добавления в набор экстентов дисков. Класс LogStore представляет это хранилище и предоставляет методы для добавления и удаления контейнеров, настройки политики и создания архивов. Он не предоставляет методы для чтения из хранилища и записи в него; эти методы предоставляются классом LogRecordSequence .
Связь между классом и LogRecordSequence классом аналогична связи между LogStore файлом диска и FileStream объектом. Файл диска предоставляет фактическое хранилище и имеет такие атрибуты, как длина и время последнего доступа, в то время FileStream как объект предоставляет представление файла, который можно использовать для чтения и записи в него. LogStore Аналогичным образом класс имеет такие атрибуты, как политика и коллекция экстентов дисков, а LogRecordSequence класс предоставляет механизм, ориентированный на запись для чтения и записи данных.
В отличие от последовательности записей файлов, представленной FileRecordSequence классом, LogStore экземпляр сохраняет свои данные в коллекции экстентов дисков, представленных LogExtent экземплярами. Экстенты в данном LogStore экземпляре имеют одинаковый размер, а пространство добавляется и удаляется из LogStore экземпляра в добавочных значениях. Чтобы добавить и удалить экстенты журнала, используйте AddRemove методы LogExtentCollection объекта, которые могут быть возвращены свойством Extents .
Экземпляр LogStore может иметь политики, связанные с ним. Они представлены LogPolicy экземплярами, которые могут быть возвращены свойством Policy . Политика диктует правила, которые журнал попытается выполнить, например максимальное количество экстентов и минимальный размер, а также инструкции по росту или сокращению LogStore в определенных условиях. Кроме того, можно указать, можно ли LogStore архивировать экземпляр. Политики задаются для каждого журнала и являются переменными, что означает, что после закрытия каждого дескриптора журнала политика больше не существует.
Конструкторы
| Имя | Описание |
|---|---|
| LogStore(SafeFileHandle) |
Инициализирует новый экземпляр класса для указанного LogStore дескриптора. |
| LogStore(String, FileMode, FileAccess, FileShare, FileSecurity) |
Инициализирует новый экземпляр класса LogStore. |
| LogStore(String, FileMode, FileAccess, FileShare) |
Инициализирует новый экземпляр класса LogStore. |
| LogStore(String, FileMode, FileAccess) |
Инициализирует новый экземпляр LogStore класса с указанным путем, режимом и доступом. |
| LogStore(String, FileMode) |
Инициализирует новый экземпляр 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) |