FileRecordSequence Classe

Definição

Implementa um IRecordSequence sobre um arquivo. Essa classe não pode ser herdada.

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
Herança
FileRecordSequence
Implementações

Exemplos

O exemplo a seguir cria uma sequência de registros, acrescenta o registro a ela e, por fim, lê os 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

Comentários

É FileRecordSequence uma sequência de registro baseada em um único arquivo de log no sistema de arquivos. É uma implementação simples da IRecordSequence interface, além de um log simples baseado em arquivo.

Para manipular um log baseado em arquivo, a conta em que seu aplicativo está sendo executado deve ter privilégios suficientes, conforme ditado pela segurança do sistema de arquivos no momento em que ele FileRecordSequence é construído. Além disso, uma demanda por FullTrust é feita em tempo de construção. Os resultados da verificação de permissão são armazenados em cache depois disso, de acordo com o modelo de segurança Windows. Você deve garantir que não exponha acidentalmente o conteúdo da sequência de registros a um usuário não autorizado.

Construtores

Nome Description
FileRecordSequence(String, FileAccess, Int32)

Inicializa uma nova instância da FileRecordSequence classe com um arquivo especificado, um modo de acesso e um tamanho de arquivo.

FileRecordSequence(String, FileAccess)

Inicializa uma nova instância da FileRecordSequence classe com um arquivo especificado e um modo de acesso.

FileRecordSequence(String)

Inicializa uma nova instância da FileRecordSequence classe com um arquivo especificado.

Propriedades

Nome Description
BaseSequenceNumber

Obtém o número de sequência do primeiro registro válido no atual FileRecordSequence.

LastSequenceNumber

Obtém o número de sequência maior que o último registro acrescentado.

MaximumRecordLength

Obtém o tamanho do maior registro que pode ser acrescentado ou lido a partir dessa sequência, em bytes.

ReservedBytes

Obtém o número total de bytes reservados.

RestartSequenceNumber

Obtém o número de sequência da área de reinicialização gravada mais recentemente.

RetryAppend

Obtém ou define um valor que indica se os acréscimos são repetidos automaticamente se o log está cheio ou não.

Métodos

Nome Description
AdvanceBaseSequenceNumber(SequenceNumber)

Move o número de sequência base do log para frente. Esse método não pode ser herdado.

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

Grava um registro de log no , usando o FileRecordSequenceespaço reservado anteriormente na sequência. Esse método não pode ser herdado.

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

Grava um registro de log no FileRecordSequence. Esse método não pode ser herdado.

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

Grava um registro de log no , usando o FileRecordSequenceespaço reservado anteriormente na sequência. Esse método não pode ser herdado.

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

Grava um registro de log no FileRecordSequence. Esse método não pode ser herdado.

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

Inicia uma operação de acréscimo assíncrona. Esse método não pode ser herdado.

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

Inicia uma operação de acréscimo assíncrona usando o espaço previamente reservado na sequência. Esse método não pode ser herdado.

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

Inicia uma operação de acréscimo assíncrona. Esse método não pode ser herdado.

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

Inicia uma operação de acréscimo assíncrona usando o espaço previamente reservado na sequência. Esse método não pode ser herdado.

BeginFlush(SequenceNumber, AsyncCallback, Object)

Inicia uma operação de liberação assíncrona, usando o espaço previamente reservado na sequência. Esse método não pode ser herdado.

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

Inicia uma operação de reserva e acréscimo assíncrona. Esse método não pode ser herdado.

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

Inicia uma operação de reserva e acréscimo assíncrona. Esse método não pode ser herdado.

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

Inicia uma operação de gravação de área de reinicialização assíncrona, usando o espaço previamente reservado na sequência. Esse método não pode ser herdado.

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

Inicia uma operação de gravação de área de reinicialização assíncrona, usando o espaço previamente reservado na sequência. Esse método não pode ser herdado.

CreateReservationCollection()

Cria um novo ReservationCollection. Esse método não pode ser herdado.

Dispose()

Libera imediatamente os recursos não gerenciados usados por um objeto.

EndAppend(IAsyncResult)

Encerra uma operação de acréscimo assíncrona. Esse método não pode ser herdado.

EndFlush(IAsyncResult)

Encerra uma operação de liberação assíncrona. Esse método não pode ser herdado.

EndReserveAndAppend(IAsyncResult)

Encerra uma operação de reserva e acréscimo assíncrona. Esse método não pode ser herdado.

EndWriteRestartArea(IAsyncResult)

Encerra uma operação de gravação de área de reinicialização assíncrona. Esse método não pode ser herdado.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
Flush()

Garante que todos os registros acrescentados tenham sido gravados. Esse método não pode ser herdado.

Flush(SequenceNumber)

Garante que todos os registros acrescentados tenham sido gravados. Esse método não pode ser herdado.

GetHashCode()

Serve como a função hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
ReadLogRecords(SequenceNumber, LogRecordEnumeratorType)

Retorna uma coleção enumerável de registros na sequência. Esse método não pode ser herdado.

ReadRestartAreas()

Retorna uma coleção enumerável das áreas de reinicialização na sequência. Esse método não pode ser herdado.

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

Faz automaticamente uma única reserva e acrescenta um registro à sequência. Esse método não pode ser herdado.

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

Faz automaticamente uma única reserva e acrescenta um registro à sequência. Esse método não pode ser herdado.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

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

Grava uma área de reinicialização no FileRecordSequence. Esse método não pode ser herdado.

WriteRestartArea(ArraySegment<Byte>, SequenceNumber)

Grava uma área de reinicialização no FileRecordSequence. Esse método não pode ser herdado.

WriteRestartArea(ArraySegment<Byte>)

Grava uma área de reinicialização no FileRecordSequence. Esse método não pode ser herdado.

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

Grava uma área de reinicialização no FileRecordSequence. Esse método não pode ser herdado.

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

Grava uma área de reinicialização no FileRecordSequence. Esse método não pode ser herdado.

WriteRestartArea(IList<ArraySegment<Byte>>)

Grava uma área de reinicialização no FileRecordSequence. Esse método não pode ser herdado.

Eventos

Nome Description
TailPinned

Ocorre quando a sequência de registros determina que a cauda deve ser movida para frente. Esse método não pode ser herdado.

Aplica-se a