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 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. |