LogStore Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Reprezentuje magazyn ze strukturą dziennika.
public ref class LogStore sealed : IDisposable
public sealed class LogStore : IDisposable
type LogStore = class
interface IDisposable
Public NotInheritable Class LogStore
Implements IDisposable
- Dziedziczenie
-
LogStore
- Implementuje
Przykłady
W poniższym przykładzie pokazano, jak zarchiwizować LogStore obiekt do dokumentu 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
Uwagi
Klasa LogRecordSequence udostępnia implementację interfejsu sekwencji rekordów na podstawie dziennika wspólnego systemu plików dziennika (CLFS). Współdziała ona z LogStore klasą, która zapewnia interfejs umożliwiający bezpośrednie manipulowanie plikiem dziennika CLFS i zarządzaniem nim. Magazyn dzienników zapewnia magazyn tylko do dołączania w ramach zestawu zakresów dysków. Klasa LogStore reprezentuje ten magazyn i udostępnia metody dodawania i usuwania kontenerów, ustawiania zasad i tworzenia archiwów. Nie zapewnia metod odczytywania z i zapisywania w magazynie; te metody są dostarczane przez klasę LogRecordSequence .
Relacja między klasą LogStore a LogRecordSequence klasą jest podobna do relacji między plikiem dysku a obiektem FileStream . Plik dysku zapewnia rzeczywisty magazyn i ma atrybuty, takie jak długość i czas ostatniego dostępu, podczas gdy FileStream obiekt udostępnia widok w pliku, który może służyć do odczytywania z niego i zapisywania w nim. LogStore Podobnie klasa ma atrybuty, takie jak zasady i kolekcja zakresów dysków, a LogRecordSequence klasa zapewnia mechanizm zorientowany na rekord do odczytywania i zapisywania danych.
W przeciwieństwie do sekwencji rekordów plików reprezentowanej FileRecordSequence przez klasę LogStore wystąpienie przechowuje swoje dane w kolekcji zakresów dysków reprezentowanych przez LogExtent wystąpienia. Zakresy w danym LogStore wystąpieniu mają jednolity rozmiar, a przestrzeń jest dodawana do wystąpienia i usuwana z LogStore wystąpienia w przyrostach zakresu. Aby dodać i usunąć zakresy dziennika, użyj Add metod LogExtentCollection i Remove obiektu , które mogą być zwracane przez Extents właściwość .
Wystąpienie LogStore może mieć skojarzone z nim zasady. Są one reprezentowane przez LogPolicy wystąpienia, które mogą być zwracane przez Policy właściwość . Zasady określają reguły, które będą podejmowane przez dziennik, takie jak maksymalna liczba zakresów i minimalny rozmiar, oraz instrukcje dotyczące zwiększania LogStore lub zmniejszania dziennika w określonych warunkach. Ponadto można określić, czy LogStore można zarchiwizować wystąpienie. Zasady są ustawiane na dziennik i są nietrwałe, co oznacza, że po zamknięciu każdego dojścia do dziennika zasady już nie istnieją.
Konstruktory
LogStore(SafeFileHandle) |
Inicjuje LogStore nowe wystąpienie klasy dla określonego dojścia. |
LogStore(String, FileMode) |
Inicjuje LogStore nowe wystąpienie klasy z określoną ścieżką i trybem. |
LogStore(String, FileMode, FileAccess) |
Inicjuje LogStore nowe wystąpienie klasy z określoną ścieżką, trybem i dostępem. |
LogStore(String, FileMode, FileAccess, FileShare) |
Inicjuje nowe wystąpienie klasy LogStore. |
LogStore(String, FileMode, FileAccess, FileShare, FileSecurity) |
Inicjuje nowe wystąpienie klasy LogStore. |
Właściwości
Archivable |
Pobiera wartość wskazującą, czy LogStore to wystąpienie można zarchiwizować. |
BaseSequenceNumber |
Pobiera najniższy numer sekwencji odpowiadający prawidłowemu rekordowi w tym LogStore wystąpieniu. |
Extents |
Pobiera kolekcję zakresów dziennika, które zawierają dane dla tego magazynu dzienników. |
FreeBytes |
Pobiera liczbę bajtów dostępnych w magazynie dzienników. |
Handle |
Pobiera uchwyt pliku systemu operacyjnego dla pliku dziennika, który jest hermetyzowany przez bieżące LogStore wystąpienie. |
LastSequenceNumber |
Po zastąpieniu w klasie pochodnej pobiera numer sekwencji następnego rekordu, który ma zostać dołączony do magazynu dzienników. |
Length |
Pobiera rozmiar magazynu dzienników w bajtach. |
Policy |
Pobiera zasady skojarzone z tym magazynem dzienników. |
StreamCount |
Pobiera liczbę strumieni dzienników w tym magazynie dzienników. |
Metody
CreateLogArchiveSnapshot() |
Tworzy kopię zapasową migawki stanu magazynu dzienników. |
CreateLogArchiveSnapshot(SequenceNumber, SequenceNumber) |
Tworzy migawkę stanu magazynu dzienników między określonymi numerami sekwencji na potrzeby tworzenia kopii zapasowej. |
Delete(String) |
Usuwa magazyn dzienników. |
Dispose() |
Zwalnia wszelkie zasoby używane przez element LogStore. |
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetType() |
Type Pobiera wartość bieżącego wystąpienia. (Odziedziczone po Object) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
SetArchiveTail(SequenceNumber) |
Ustawia numer sekwencji ogona archiwum. |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |