FileRecordSequence Klasa

Definicja

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.

Dotyczy