Compartir a través de


FileRecordSequence Clase

Definición

Implementa una IRecordSequence sobre 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

El siguiente ejemplo crea una secuencia de registro, anexa el registro a ella y finalmente lee 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 registro basada en un archivo de registro único del sistema de archivos. Es una implementación simple de la interfaz IRecordSequence sobre un registro basado en archivos simple.

Para manipular un registro basado en archivos, la cuenta en la que se ejecuta su aplicación debe tener los privilegios suficientes, tal y como lo dicta la seguridad del sistema de archivos en el momento que se construye FileRecordSequence. Además, en el momento de la construcción se realiza una petición de FullTrust. Los resultados de la comprobación del permiso se almacenan después en memoria caché siguiendo el modelo de seguridad de Windows. Debería asegurarse que no expone accidentalmente el contenido de la secuencia del registro a un usuario sin autorización.

Constructores

FileRecordSequence(String)

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

FileRecordSequence(String, FileAccess)

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

FileRecordSequence(String, FileAccess, Int32)

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

Propiedades

BaseSequenceNumber

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

LastSequenceNumber

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

MaximumRecordLength

Obtiene el tamaño del mayor registro que se puede anexar a o leerse desde esta secuencia, en bytes.

ReservedBytes

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

RestartSequenceNumber

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

RetryAppend

Obtiene o establece un valor que indica si los anexos se reintentan automáticamente en caso de que el registro esté completo.

Métodos

AdvanceBaseSequenceNumber(SequenceNumber)

Avanza el número de secuencia base del registro. Este método no se puede heredar.

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

Escribe una entrada de registro en la FileRecordSequence. Este método no se puede heredar.

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

Escribe una entrada de registro en la FileRecordSequence, utilizando el espacio previamente reservado en la secuencia. Este método no se puede heredar.

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

Escribe una entrada de registro en la FileRecordSequence. Este método no se puede heredar.

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

Escribe una entrada de registro en la FileRecordSequence, utilizando el espacio previamente reservado en la secuencia. Este método no se puede heredar.

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

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

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

Comienza una operación de anexado asincrónica que utiliza el espacio previamente reservado en la secuencia. Este método no se puede heredar.

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

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

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

Comienza una operación de anexado asincrónica que utiliza 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ónica, utilizando el espacio previamente reservado en la secuencia. Este método no se puede heredar.

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

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

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

Comienza una reserva asincrónica y una operación de anexado. 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, utilizando el 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, utilizando el espacio reservado previamente en la secuencia. Este método no se puede heredar.

CreateReservationCollection()

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

Dispose()

Inmediatamente libera los recursos no administrados utilizados por un objeto.

EndAppend(IAsyncResult)

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

EndFlush(IAsyncResult)

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

EndReserveAndAppend(IAsyncResult)

Finaliza una reserva asincrónica y una operación de anexado. 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 que el objeto actual.

(Heredado de Object)
Flush()

Asegúrese de que todos los registros anexados se han escrito. Este método no se puede heredar.

Flush(SequenceNumber)

Asegúrese de que todos los registros anexados se han escrito. Este método no se puede heredar.

GetHashCode()

Sirve 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 Object actual.

(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 reserva única 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 reserva única 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>)

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

WriteRestartArea(ArraySegment<Byte>, SequenceNumber)

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

WriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection)

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

WriteRestartArea(IList<ArraySegment<Byte>>)

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

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

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

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

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

Eventos

TailPinned

Se produce cuando la secuencia del registro determina que se debe avanzar la cola. Este método no se puede heredar.

Se aplica a