FileRecordSequence 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.
Implementuje element IRecordSequence na górze pliku. Klasa ta nie może być dziedziczona.
public ref class FileRecordSequence sealed : IDisposable, System::IO::Log::IRecordSequence
public sealed class FileRecordSequence : IDisposable, System.IO.Log.IRecordSequence
type FileRecordSequence = class
interface IRecordSequence
interface IDisposable
Public NotInheritable Class FileRecordSequence
Implements IDisposable, IRecordSequence
- Dziedziczenie
-
FileRecordSequence
- Implementuje
Przykłady
Poniższy przykład tworzy sekwencję rekordów, dołącza do niego rekord, a na koniec odczytuje rekordy.
public class MyLog
{
string logName = "test.log";
FileRecordSequence sequence = null;
bool delete = true;
public MyLog()
{
// Create a FileRecordSequence.
sequence = new FileRecordSequence(logName, FileAccess.ReadWrite);
}
// Append records to the record sequence.
public void AppendRecords()
{
Console.WriteLine("Appending Log Records...");
SequenceNumber previous = SequenceNumber.Invalid;
previous = sequence.Append(CreateData("Hello World!"), SequenceNumber.Invalid, SequenceNumber.Invalid, RecordAppendOptions.ForceFlush);
previous = sequence.Append(CreateData("This is my first Logging App"), SequenceNumber.Invalid, SequenceNumber.Invalid, RecordAppendOptions.ForceFlush);
previous = sequence.Append(CreateData("Using FileRecordSequence..."), SequenceNumber.Invalid, SequenceNumber.Invalid, RecordAppendOptions.ForceFlush);
Console.WriteLine("Done...");
}
// Read the records added to the log.
public void ReadRecords()
{
Encoding enc = Encoding.Unicode;
Console.WriteLine();
Console.WriteLine("Reading Log Records...");
try
{
foreach (LogRecord record in this.sequence.ReadLogRecords(this.sequence.BaseSequenceNumber, LogRecordEnumeratorType.Next))
{
byte[] data = new byte[record.Data.Length];
record.Data.Read(data, 0, (int)record.Data.Length);
string mystr = enc.GetString(data);
Console.WriteLine(" {0}", mystr);
}
}
catch (Exception e)
{
Console.WriteLine("Exception {0} {1}", e.GetType(), e.Message);
}
Console.WriteLine();
}
// Dispose the record sequence and delete the log file.
public void Cleanup()
{
// Dispose the sequence.
sequence.Dispose();
// Delete the log file.
if (delete)
{
try
{
File.Delete(this.logName);
}
catch (Exception e)
{
Console.WriteLine("Exception {0} {1}", e.GetType(), e.Message);
}
}
}
// Converts the given data to an Array of ArraySegment<byte>
public static IList<ArraySegment<byte>> CreateData(string str)
{
Encoding enc = Encoding.Unicode;
byte[] array = enc.GetBytes(str);
ArraySegment<byte>[] segments = new ArraySegment<byte>[1];
segments[0] = new ArraySegment<byte>(array);
return Array.AsReadOnly<ArraySegment<byte>>(segments);
}
}
class LogSample
{
static void Main2(string[] args)
{
MyLog log = new MyLog();
log.AppendRecords();
log.ReadRecords();
log.Cleanup();
}
}
Public Class MyLog
Private logName As String = "test.log"
Private sequence As FileRecordSequence = Nothing
Private delete As Boolean = True
Public Sub New()
' Create a FileRecordSequence.
sequence = New FileRecordSequence(logName, FileAccess.ReadWrite)
End Sub
' Append records to the record sequence.
Public Sub AppendRecords()
Console.WriteLine("Appending Log Records...")
Dim previous As SequenceNumber = SequenceNumber.Invalid
previous = sequence.Append(CreateData("Hello World!"), SequenceNumber.Invalid, SequenceNumber.Invalid, RecordAppendOptions.ForceFlush)
previous = sequence.Append(CreateData("This is my first Logging App"), SequenceNumber.Invalid, SequenceNumber.Invalid, RecordAppendOptions.ForceFlush)
previous = sequence.Append(CreateData("Using FileRecordSequence..."), SequenceNumber.Invalid, SequenceNumber.Invalid, RecordAppendOptions.ForceFlush)
Console.WriteLine("Done...")
End Sub
' Read the records added to the log.
Public Sub ReadRecords()
Dim enc As Encoding = Encoding.Unicode
Console.WriteLine()
Console.WriteLine("Reading Log Records...")
Try
For Each record In Me.sequence.ReadLogRecords(Me.sequence.BaseSequenceNumber, LogRecordEnumeratorType.Next)
Dim data(record.Data.Length - 1) As Byte
record.Data.Read(data, 0, CInt(Fix(record.Data.Length)))
Dim mystr As String = enc.GetString(data)
Console.WriteLine(" {0}", mystr)
Next record
Catch e As Exception
Console.WriteLine("Exception {0} {1}", e.GetType(), e.Message)
End Try
Console.WriteLine()
End Sub
' Dispose the record sequence and delete the log file.
Public Sub Cleanup()
' Dispose the sequence.
sequence.Dispose()
' Delete the log file.
If delete Then
Try
File.Delete(Me.logName)
Catch e As Exception
Console.WriteLine("Exception {0} {1}", e.GetType(), e.Message)
End Try
End If
End Sub
' Converts the given data to an Array of ArraySegment<byte>
Public Shared Function CreateData(ByVal str As String) As IList(Of ArraySegment(Of Byte))
Dim enc As Encoding = Encoding.Unicode
Dim array() As Byte = enc.GetBytes(str)
Dim segments(0) As ArraySegment(Of Byte)
segments(0) = New ArraySegment(Of Byte)(array)
Return System.Array.AsReadOnly(Of ArraySegment(Of Byte))(segments)
End Function
End Class
Friend Class LogSample
Private Shared Sub Main2(ByVal args() As String)
Dim log As New MyLog()
log.AppendRecords()
log.ReadRecords()
log.Cleanup()
End Sub
End Class
Uwagi
Jest FileRecordSequence to sekwencja rekordów oparta na pojedynczym pliku dziennika w systemie plików. Jest to prosta implementacja interfejsu IRecordSequence na podstawie prostego dziennika opartego na plikach.
Aby manipulować dziennikiem opartym na plikach, konto, w którym działa aplikacja, musi mieć wystarczające uprawnienia, zgodnie z wymaganiami bezpieczeństwa systemu plików w momencie FileRecordSequence konstruowania. Ponadto zapotrzebowanie na FullTrust jest wykonywane w czasie budowy. Wyniki weryfikacji uprawnień są następnie buforowane zgodnie z modelem zabezpieczeń systemu Windows. Upewnij się, że zawartość sekwencji rekordów nie została przypadkowo uwidoczniona dla nieautoryzowanego użytkownika.
Konstruktory
FileRecordSequence(String) |
Inicjuje FileRecordSequence nowe wystąpienie klasy z określonym plikiem. |
FileRecordSequence(String, FileAccess) |
Inicjuje FileRecordSequence nowe wystąpienie klasy z określonym plikiem i trybem dostępu. |
FileRecordSequence(String, FileAccess, Int32) |
Inicjuje FileRecordSequence nowe wystąpienie klasy z określonym plikiem, trybem dostępu i rozmiarem pliku. |
Właściwości
BaseSequenceNumber |
Pobiera numer sekwencji pierwszego prawidłowego rekordu w bieżącym .FileRecordSequence |
LastSequenceNumber |
Pobiera numer sekwencji, który jest większy niż ostatni dołączony rekord. |
MaximumRecordLength |
Pobiera rozmiar największego rekordu, który można dołączyć do tej sekwencji lub odczytać z tej sekwencji w bajtach. |
ReservedBytes |
Pobiera łączną liczbę bajtów, które zostały zarezerwowane. |
RestartSequenceNumber |
Pobiera numer sekwencji ostatnio napisanego obszaru ponownego uruchamiania. |
RetryAppend |
Pobiera lub ustawia wartość wskazującą, czy dołączania są automatycznie ponawiane, jeśli dziennik jest pełny. |
Metody
AdvanceBaseSequenceNumber(SequenceNumber) |
Przenosi numer sekwencji podstawowej dziennika do przodu. Nie można dziedziczyć tej metody. |
Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions) |
Zapisuje rekord dziennika w obiekcie FileRecordSequence. Nie można dziedziczyć tej metody. |
Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection) |
Zapisuje rekord dziennika w obiekcie FileRecordSequence, używając wcześniej zarezerwowanego miejsca w sekwencji. Nie można dziedziczyć tej metody. |
Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions) |
Zapisuje rekord dziennika w obiekcie FileRecordSequence. Nie można dziedziczyć tej metody. |
Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection) |
Zapisuje rekord dziennika w obiekcie FileRecordSequence, używając wcześniej zarezerwowanego miejsca w sekwencji. Nie można dziedziczyć tej metody. |
BeginAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, AsyncCallback, Object) |
Rozpoczyna operację asynchronicznego dołączania. Nie można dziedziczyć tej metody. |
BeginAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, AsyncCallback, Object) |
Rozpoczyna operację asynchronicznego dołączania przy użyciu miejsca wcześniej zarezerwowanego w sekwencji. Nie można dziedziczyć tej metody. |
BeginAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, AsyncCallback, Object) |
Rozpoczyna operację asynchronicznego dołączania. Nie można dziedziczyć tej metody. |
BeginAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, AsyncCallback, Object) |
Rozpoczyna operację asynchronicznego dołączania przy użyciu miejsca wcześniej zarezerwowanego w sekwencji. Nie można dziedziczyć tej metody. |
BeginFlush(SequenceNumber, AsyncCallback, Object) |
Rozpoczyna operację opróżniania asynchronicznego, używając wcześniej zarezerwowanego miejsca w sekwencji. Nie można dziedziczyć tej metody. |
BeginReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[], AsyncCallback, Object) |
Rozpoczyna asynchroniczną rezerwę i operację dołączania. Nie można dziedziczyć tej metody. |
BeginReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[], AsyncCallback, Object) |
Rozpoczyna asynchroniczną rezerwę i operację dołączania. Nie można dziedziczyć tej metody. |
BeginWriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection, AsyncCallback, Object) |
Rozpoczyna asynchroniczną operację zapisu obszaru ponownego uruchamiania przy użyciu miejsca zarezerwowanego wcześniej w sekwencji. Nie można dziedziczyć tej metody. |
BeginWriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber, ReservationCollection, AsyncCallback, Object) |
Rozpoczyna asynchroniczną operację zapisu obszaru ponownego uruchamiania przy użyciu miejsca zarezerwowanego wcześniej w sekwencji. Nie można dziedziczyć tej metody. |
CreateReservationCollection() |
Tworzy nowy adres ReservationCollection. Nie można dziedziczyć tej metody. |
Dispose() |
Natychmiast zwalnia niezarządzane zasoby używane przez obiekt. |
EndAppend(IAsyncResult) |
Kończy operację asynchronicznego dołączania. Nie można dziedziczyć tej metody. |
EndFlush(IAsyncResult) |
Kończy operację asynchronicznego opróżniania. Nie można dziedziczyć tej metody. |
EndReserveAndAppend(IAsyncResult) |
Kończy asynchroniczną operację rezerw i dołączania. Nie można dziedziczyć tej metody. |
EndWriteRestartArea(IAsyncResult) |
Kończy asynchroniczną operację zapisu obszaru ponownego uruchamiania. Nie można dziedziczyć tej metody. |
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
Flush() |
Gwarantuje, że wszystkie dołączone rekordy zostały zapisane. Nie można dziedziczyć tej metody. |
Flush(SequenceNumber) |
Gwarantuje, że wszystkie dołączone rekordy zostały zapisane. Nie można dziedziczyć tej metody. |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetType() |
Type Pobiera bieżące wystąpienie. (Odziedziczone po Object) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
ReadLogRecords(SequenceNumber, LogRecordEnumeratorType) |
Zwraca wyliczalną kolekcję rekordów w sekwencji. Nie można dziedziczyć tej metody. |
ReadRestartAreas() |
Zwraca wyliczalną kolekcję obszarów ponownego uruchamiania w sekwencji. Nie można dziedziczyć tej metody. |
ReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[]) |
Automatycznie tworzy pojedynczą rezerwację i dołącza rekord do sekwencji. Nie można dziedziczyć tej metody. |
ReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[]) |
Automatycznie tworzy pojedynczą rezerwację i dołącza rekord do sekwencji. Nie można dziedziczyć tej metody. |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
WriteRestartArea(ArraySegment<Byte>) |
Zapisuje obszar ponownego uruchamiania w obiekcie FileRecordSequence. Nie można dziedziczyć tej metody. |
WriteRestartArea(ArraySegment<Byte>, SequenceNumber) |
Zapisuje obszar ponownego uruchamiania w obiekcie FileRecordSequence. Nie można dziedziczyć tej metody. |
WriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection) |
Zapisuje obszar ponownego uruchamiania w obiekcie FileRecordSequence. Nie można dziedziczyć tej metody. |
WriteRestartArea(IList<ArraySegment<Byte>>) |
Zapisuje obszar ponownego uruchamiania w obiekcie FileRecordSequence. Nie można dziedziczyć tej metody. |
WriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber) |
Zapisuje obszar ponownego uruchamiania w obiekcie FileRecordSequence. Nie można dziedziczyć tej metody. |
WriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber, ReservationCollection) |
Zapisuje obszar ponownego uruchamiania w obiekcie FileRecordSequence. Nie można dziedziczyć tej metody. |
Zdarzenia
TailPinned |
Występuje, gdy sekwencja rekordów określa, że ogon musi zostać przeniesiony do przodu. Nie można dziedziczyć tej metody. |