Sdílet prostřednictvím


FileRecordSequence Třída

Definice

Implementuje nad IRecordSequence soubor . 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í záznam a nakonec záznamy přečte.


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

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

Pokud chcete pracovat se souborovým protokolem, musí mít účet, ve kterém je vaše aplikace spuštěná, dostatečná oprávnění, jak to určuje zabezpečení systému souborů v době FileRecordSequence vytvoření. Kromě toho je požadavek na FullTrust učiněn v době výstavby. Výsledky ověření oprávnění se poté ukládají do mezipaměti v souladu s modelem zabezpečení Windows. Měli byste se ujistit, že obsah sekvence záznamů nechtěně nevystavíte neoprávněnému uživateli.

Konstruktory

FileRecordSequence(String)

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

FileRecordSequence(String, FileAccess)

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

FileRecordSequence(String, FileAccess, Int32)

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

Vlastnosti

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 zapsané oblasti restartování.

RetryAppend

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

Metody

AdvanceBaseSequenceNumber(SequenceNumber)

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

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

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

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

Zapíše záznam protokolu do FileRecordSequencesouboru s použitím mezery, které byly v pořadí dříve vyhrazeny. Tuto metodu nelze dědit.

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

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

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

Zapíše záznam protokolu do FileRecordSequencesouboru s použitím mezery, které byly v pořadí dříve vyhrazeny. Tuto metodu nelze dědit.

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

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

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

Zahájí asynchronní operaci připojení pomocí mezery, která byla dříve vyhrazena v sekvenci. Tuto metodu nelze dědit.

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

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

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

Zahájí asynchronní operaci připojení pomocí mezery, která byla dříve vyhrazena v sekvenci. Tuto metodu nelze dědit.

BeginFlush(SequenceNumber, AsyncCallback, Object)

Zahájí asynchronní operaci vyprázdnění s použitím místa, které bylo dříve v pořadí vyhrazeno. Tuto metodu nelze dědit.

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

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

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

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

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

Zahájí asynchronní operaci zápisu do oblasti restartování s využitím místa, které bylo dříve rezervováno v sekvenci. Tuto metodu nelze dědit.

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

Zahájí asynchronní operaci zápisu do oblasti restartování s využitím místa, které bylo dříve rezervováno v sekvenci. Tuto metodu nelze dědit.

CreateReservationCollection()

Vytvoří nový objekt ReservationCollection. Tuto metodu nelze dědit.

Dispose()

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

EndAppend(IAsyncResult)

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

EndFlush(IAsyncResult)

Ukončí operaci asynchronního vyprázdnění. Tuto metodu nelze dědit.

EndReserveAndAppend(IAsyncResult)

Ukončí asynchronní operaci rezervace a připojení. Tuto metodu nelze dědit.

EndWriteRestartArea(IAsyncResult)

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

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

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

Zajišťuje, aby byly zapsány všechny připojené záznamy. Tuto metodu nelze dědit.

Flush(SequenceNumber)

Zajišťuje, aby byly zapsány všechny připojené záznamy. Tuto metodu nelze dědit.

GetHashCode()

Slouží jako výchozí hashovací funkce.

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

Type Získá z aktuální instance.

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

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

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

Vrátí výčtovou kolekci záznamů v sekvenci. Tuto metodu nelze dědit.

ReadRestartAreas()

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

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

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

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

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

ToString()

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

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

Zapíše oblast restartování do .FileRecordSequence Tuto metodu nelze dědit.

WriteRestartArea(ArraySegment<Byte>, SequenceNumber)

Zapíše oblast restartování do .FileRecordSequence Tuto metodu nelze dědit.

WriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection)

Zapíše oblast restartování do .FileRecordSequence Tuto metodu nelze dědit.

WriteRestartArea(IList<ArraySegment<Byte>>)

Zapíše oblast restartování do .FileRecordSequence Tuto metodu nelze dědit.

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

Zapíše oblast restartování do .FileRecordSequence Tuto metodu nelze dědit.

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

Zapíše oblast restartování do .FileRecordSequence Tuto metodu nelze dědit.

Událost

TailPinned

Vyvolá se, když posloupnost záznamů určí, že chvost musí být posunut dopředu. Tuto metodu nelze dědit.

Platí pro