FileRecordSequence Clase

Definición

Implementa una IRecordSequence parte superior de un archivo. Esta clase no puede heredarse.

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
Herencia
FileRecordSequence
Implementaciones

Ejemplos

En el ejemplo siguiente se crea una secuencia de registros, se anexa el registro y, por último, se leen los registros.


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

Comentarios

FileRecordSequence es una secuencia de registros basada en un único archivo de registro en el sistema de archivos. Es una implementación sencilla de la IRecordSequence interfaz, sobre un registro simple basado en archivos.

Para manipular un registro basado en archivos, la cuenta en la que se ejecuta la aplicación debe tener privilegios suficientes, tal como lo dicta la seguridad del sistema de archivos en el momento en que se construye.FileRecordSequence Además, se realiza una demanda de FullTrust en tiempo de construcción. Los resultados de la comprobación de permisos se almacenan en caché después en consonancia con el modelo de seguridad de Windows. Debe asegurarse de que no exponga accidentalmente el contenido de la secuencia de registros a un usuario no autorizado.

Constructores

Nombre Description
FileRecordSequence(String, FileAccess, Int32)

Inicializa una nueva instancia de la FileRecordSequence clase con un archivo especificado, un modo de acceso y un tamaño de archivo.

FileRecordSequence(String, FileAccess)

Inicializa una nueva instancia de la FileRecordSequence clase con un archivo especificado y un modo de acceso.

FileRecordSequence(String)

Inicializa una nueva instancia de la FileRecordSequence clase con un archivo especificado.

Propiedades

Nombre Description
BaseSequenceNumber

Obtiene el número de secuencia del primer registro válido en el objeto actual FileRecordSequence.

LastSequenceNumber

Obtiene el número de secuencia que es mayor que el último registro anexado.

MaximumRecordLength

Obtiene el tamaño del registro más grande que se puede anexar o leer desde esta secuencia, en bytes.

ReservedBytes

Obtiene el número total de bytes que se han reservado.

RestartSequenceNumber

Obtiene el número de secuencia del área de reinicio escrita más recientemente.

RetryAppend

Obtiene o establece un valor que indica si los anexos se reintentan automáticamente si el registro está lleno.

Métodos

Nombre Description
AdvanceBaseSequenceNumber(SequenceNumber)

Mueve el número de secuencia base del reenvío del registro. Este método no se puede heredar.

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

Escribe un registro de registro en , FileRecordSequenceutilizando el espacio reservado previamente en la secuencia. Este método no se puede heredar.

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

Escribe un registro de registro en .FileRecordSequence Este método no se puede heredar.

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

Escribe un registro de registro en , FileRecordSequenceutilizando el espacio reservado previamente en la secuencia. Este método no se puede heredar.

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

Escribe un registro de registro en .FileRecordSequence Este método no se puede heredar.

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

Inicia una operación de anexión asincrónica. Este método no se puede heredar.

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

Inicia una operación de anexión asincrónica mediante el espacio previamente reservado en la secuencia. Este método no se puede heredar.

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

Inicia una operación de anexión asincrónica. Este método no se puede heredar.

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

Inicia una operación de anexión asincrónica mediante el espacio previamente reservado en la secuencia. Este método no se puede heredar.

BeginFlush(SequenceNumber, AsyncCallback, Object)

Comienza una operación de vaciado asincrónico, usando espacio reservado previamente en la secuencia. Este método no se puede heredar.

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

Comienza una operación asincrónica de reserva y anexión. Este método no se puede heredar.

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

Comienza una operación asincrónica de reserva y anexión. Este método no se puede heredar.

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

Comienza una operación de escritura de área de reinicio asincrónica, usando espacio reservado previamente en la secuencia. Este método no se puede heredar.

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

Comienza una operación de escritura de área de reinicio asincrónica, usando espacio reservado previamente en la secuencia. Este método no se puede heredar.

CreateReservationCollection()

Crea un nuevo ReservationCollectionobjeto . Este método no se puede heredar.

Dispose()

Libera inmediatamente los recursos no administrados utilizados por un objeto .

EndAppend(IAsyncResult)

Finaliza una operación de anexión asincrónica. Este método no se puede heredar.

EndFlush(IAsyncResult)

Finaliza una operación de vaciado asincrónico. Este método no se puede heredar.

EndReserveAndAppend(IAsyncResult)

Finaliza una operación asincrónica de reserva y anexión. Este método no se puede heredar.

EndWriteRestartArea(IAsyncResult)

Finaliza una operación de escritura de área de reinicio asincrónica. Este método no se puede heredar.

Equals(Object)

Determina si el objeto especificado es igual al objeto actual.

(Heredado de Object)
Flush()

Garantiza que se hayan escrito todos los registros anexados. Este método no se puede heredar.

Flush(SequenceNumber)

Garantiza que se hayan escrito todos los registros anexados. Este método no se puede heredar.

GetHashCode()

Actúa como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Objectactual.

(Heredado de Object)
ReadLogRecords(SequenceNumber, LogRecordEnumeratorType)

Devuelve una colección enumerable de registros en la secuencia. Este método no se puede heredar.

ReadRestartAreas()

Devuelve una colección enumerable de las áreas de reinicio de la secuencia. Este método no se puede heredar.

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

Realiza automáticamente una sola reserva y anexa un registro a la secuencia. Este método no se puede heredar.

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

Realiza automáticamente una sola reserva y anexa un registro a la secuencia. Este método no se puede heredar.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)
WriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection)

Escribe un área de reinicio en .FileRecordSequence Este método no se puede heredar.

WriteRestartArea(ArraySegment<Byte>, SequenceNumber)

Escribe un área de reinicio en .FileRecordSequence Este método no se puede heredar.

WriteRestartArea(ArraySegment<Byte>)

Escribe un área de reinicio en .FileRecordSequence Este método no se puede heredar.

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

Escribe un área de reinicio en .FileRecordSequence Este método no se puede heredar.

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

Escribe un área de reinicio en .FileRecordSequence Este método no se puede heredar.

WriteRestartArea(IList<ArraySegment<Byte>>)

Escribe un área de reinicio en .FileRecordSequence Este método no se puede heredar.

Eventos

Nombre Description
TailPinned

Se produce cuando la secuencia de registros determina que la cola debe moverse hacia delante. Este método no se puede heredar.

Se aplica a