FileRecordSequence Classe

Definição

Implementa um IRecordSequence na parte superior de 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 com base 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á em execução 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 posteriormente 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

FileRecordSequence(String)

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

FileRecordSequence(String, FileAccess)

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

FileRecordSequence(String, FileAccess, Int32)

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

Propriedades

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 que é maior que o último registro acrescentado.

MaximumRecordLength

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

ReservedBytes

Obtém o número total de bytes que foram 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 há ou não novas tentativas automáticas de acréscimos se o log estiver cheio.

Métodos

AdvanceBaseSequenceNumber(SequenceNumber)

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

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

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

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

Grava um registro de log no FileRecordSequence, usando o espaç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 para o FileRecordSequence. Esse método não pode ser herdado.

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

Grava um registro de log no FileRecordSequence, usando o espaço reservado anteriormente na sequência. 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)

Começa uma operação de acréscimo assíncrona, usando o espaço reservado anteriormente 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)

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

BeginFlush(SequenceNumber, AsyncCallback, Object)

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

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

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

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

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

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

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

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

Começa uma operação de gravação de área de reinicialização assíncrona, usando o espaço reservado anteriormente 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 assíncrona de liberação. Esse método não pode ser herdado.

EndReserveAndAppend(IAsyncResult)

Encerra uma operação de acréscimo e de reserva 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 de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(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 de á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>)

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

WriteRestartArea(ArraySegment<Byte>, SequenceNumber)

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

WriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection)

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

WriteRestartArea(IList<ArraySegment<Byte>>)

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

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

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

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

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

Eventos

TailPinned

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

Aplica-se a