FileRecordSequence Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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
O FileRecordSequence é uma sequência de registros 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á sendo executado deve ter privilégios suficientes, conforme ditado pela segurança do sistema de arquivos no momento em que o FileRecordSequence é construído. Além disso, uma demanda por FullTrust é feita no momento da 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 do 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. |