FileRecordSequence Třída

Definice

Implementuje nad IRecordSequence souborem. Tato třída se nemůže dědit.

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
Dědičnost
FileRecordSequence
Implementuje

Příklady

Následující příklad vytvoří sekvenci záznamů, připojí k němu záznam a nakonec přečte záznamy.


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

Poznámky

Jedná se FileRecordSequence o sekvenci záznamů založenou na jednom souboru protokolu v systému souborů. Jedná se o jednoduchou implementaci IRecordSequence rozhraní nad jednoduchým protokolem založeným na souborech.

Pokud chcete pracovat s protokolem založeným na souborech, musí mít účet, ve kterém je vaše aplikace spuštěná, dostatečná oprávnění, jak určuje zabezpečení systému souborů v době, kdy FileRecordSequence je vytvořena. Kromě toho se poptávka po FullTrustu provádí v době výstavby. Výsledky ověření oprávnění se následně ukládají do mezipaměti v souladu s modelem zabezpečení Windows. Měli byste zajistit, abyste nechtěně nezpřístupnili obsah sekvence záznamů neoprávněnému uživateli.

Konstruktory

Name Description
FileRecordSequence(String, FileAccess, Int32)

Inicializuje novou instanci FileRecordSequence třídy se zadaným souborem, režimem přístupu a velikostí souboru.

FileRecordSequence(String, FileAccess)

Inicializuje novou instanci FileRecordSequence třídy se zadaným souborem a režimem přístupu.

FileRecordSequence(String)

Inicializuje novou instanci FileRecordSequence třídy se zadaným souborem.

Vlastnosti

Name Description
BaseSequenceNumber

Získá pořadové číslo prvního platného záznamu v aktuálním FileRecordSequence.

LastSequenceNumber

Získá pořadové číslo, které je větší než poslední připojený záznam.

MaximumRecordLength

Získá velikost největšího záznamu, který lze připojit k této sekvenci nebo číst z této sekvence v bajtech.

ReservedBytes

Získá celkový počet bajtů, které byly rezervovány.

RestartSequenceNumber

Získá pořadové číslo naposledy napsané oblasti restartování.

RetryAppend

Získá nebo nastaví hodnotu označující, zda jsou připojení automaticky opakovat, pokud je protokol plný.

Metody

Name Description
AdvanceBaseSequenceNumber(SequenceNumber)

Přesune základní pořadové číslo protokolu dopředu. Tuto metodu nelze zdědit.

Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection)

Zapíše záznam protokolu do záznamu FileRecordSequence, pomocí mezery dříve rezervované v sekvenci. Tuto metodu nelze zdědit.

Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions)

Zapíše záznam protokolu do záznamu FileRecordSequence. Tuto metodu nelze zdědit.

Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection)

Zapíše záznam protokolu do záznamu FileRecordSequence, pomocí mezery dříve rezervované v sekvenci. Tuto metodu nelze zdědit.

Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions)

Zapíše záznam protokolu do záznamu FileRecordSequence. Tuto metodu nelze zdědit.

BeginAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, AsyncCallback, Object)

Zahájí asynchronní operaci připojení. Tuto metodu nelze zdědit.

BeginAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, AsyncCallback, Object)

Zahájí asynchronní operaci připojení pomocí místa, které bylo dříve vyhrazeno v sekvenci. Tuto metodu nelze zdědit.

BeginAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, AsyncCallback, Object)

Zahájí asynchronní operaci připojení. Tuto metodu nelze zdědit.

BeginAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, AsyncCallback, Object)

Zahájí asynchronní operaci připojení pomocí místa, které bylo dříve vyhrazeno v sekvenci. Tuto metodu nelze zdědit.

BeginFlush(SequenceNumber, AsyncCallback, Object)

Zahájí asynchronní operaci vyprazdnutí pomocí místa, které bylo dříve vyhrazeno v posloupnosti. Tuto metodu nelze zdědit.

BeginReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[], AsyncCallback, Object)

Zahájí asynchronní rezervaci a operaci připojení. Tuto metodu nelze zdědit.

BeginReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[], AsyncCallback, Object)

Zahájí asynchronní rezervaci a operaci připojení. Tuto metodu nelze zdědit.

BeginWriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection, AsyncCallback, Object)

Zahájí asynchronní operaci zápisu do oblasti restartování pomocí místa, které bylo dříve vyhrazeno v sekvenci. Tuto metodu nelze zdědit.

BeginWriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber, ReservationCollection, AsyncCallback, Object)

Zahájí asynchronní operaci zápisu do oblasti restartování pomocí místa, které bylo dříve vyhrazeno v sekvenci. Tuto metodu nelze zdědit.

CreateReservationCollection()

Vytvoří novou ReservationCollection. Tuto metodu nelze zdědit.

Dispose()

Okamžitě uvolní nespravované prostředky používané objektem.

EndAppend(IAsyncResult)

Ukončí asynchronní operaci připojení. Tuto metodu nelze zdědit.

EndFlush(IAsyncResult)

Ukončí asynchronní operaci vyprazdnutí. Tuto metodu nelze zdědit.

EndReserveAndAppend(IAsyncResult)

Ukončí asynchronní rezervaci a operaci připojení. Tuto metodu nelze zdědit.

EndWriteRestartArea(IAsyncResult)

Ukončí asynchronní operaci zápisu do oblasti restartování. Tuto metodu nelze zdědit.

Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

(Zděděno od Object)
Flush()

Zajišťuje zápis všech připojených záznamů. Tuto metodu nelze zdědit.

Flush(SequenceNumber)

Zajišťuje zápis všech připojených záznamů. Tuto metodu nelze zdědit.

GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetType()

Získá Type aktuální instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
ReadLogRecords(SequenceNumber, LogRecordEnumeratorType)

Vrátí výčet kolekcí záznamů v sekvenci. Tuto metodu nelze zdědit.

ReadRestartAreas()

Vrátí výčtovou kolekci oblastí restartování v sekvenci. Tuto metodu nelze zdědit.

ReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[])

Automaticky vytvoří jednu rezervaci a připojí k sekvenci záznam. Tuto metodu nelze zdědit.

ReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[])

Automaticky vytvoří jednu rezervaci a připojí k sekvenci záznam. Tuto metodu nelze zdědit.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)
WriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection)

Zapíše do FileRecordSequenceoblasti restartování . Tuto metodu nelze zdědit.

WriteRestartArea(ArraySegment<Byte>, SequenceNumber)

Zapíše do FileRecordSequenceoblasti restartování . Tuto metodu nelze zdědit.

WriteRestartArea(ArraySegment<Byte>)

Zapíše do FileRecordSequenceoblasti restartování . Tuto metodu nelze zdědit.

WriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber, ReservationCollection)

Zapíše do FileRecordSequenceoblasti restartování . Tuto metodu nelze zdědit.

WriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber)

Zapíše do FileRecordSequenceoblasti restartování . Tuto metodu nelze zdědit.

WriteRestartArea(IList<ArraySegment<Byte>>)

Zapíše do FileRecordSequenceoblasti restartování . Tuto metodu nelze zdědit.

Událost

Name Description
TailPinned

Nastane, když posloupnost záznamů určuje, že ocas musí být přesunut dopředu. Tuto metodu nelze zdědit.

Platí pro