FileRecordSequence Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Implementa un IRecordSequence oggetto sopra un file. La classe non può essere ereditata.
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
- Ereditarietà
-
FileRecordSequence
- Implementazioni
Esempio
Nell'esempio seguente viene creata una sequenza di record, viene aggiunto un record e infine vengono letti i record.
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
Commenti
FileRecordSequence è una sequenza di record basata su un singolo file di log nel file system. Si tratta di una semplice implementazione dell'interfaccia IRecordSequence , oltre a un semplice log basato su file.
Per modificare un log basato su file, l'account in cui è in esecuzione l'applicazione deve disporre di privilegi sufficienti, in base alla sicurezza del file system al momento della FileRecordSequence costruzione di . Inoltre, una richiesta di FullTrust viene effettuata in fase di costruzione. I risultati della verifica delle autorizzazioni vengono quindi memorizzati nella cache in base al modello di sicurezza Windows. È necessario assicurarsi di non esporre accidentalmente il contenuto della sequenza di record a un utente non autorizzato.
Costruttori
| Nome | Descrizione |
|---|---|
| FileRecordSequence(String, FileAccess, Int32) |
Inizializza una nuova istanza della FileRecordSequence classe con un file specificato, una modalità di accesso e una dimensione del file. |
| FileRecordSequence(String, FileAccess) |
Inizializza una nuova istanza della FileRecordSequence classe con un file specificato e una modalità di accesso. |
| FileRecordSequence(String) |
Inizializza una nuova istanza della FileRecordSequence classe con un file specificato. |
Proprietà
| Nome | Descrizione |
|---|---|
| BaseSequenceNumber |
Ottiene il numero di sequenza del primo record valido nell'oggetto corrente FileRecordSequence. |
| LastSequenceNumber |
Ottiene il numero di sequenza maggiore dell'ultimo record aggiunto. |
| MaximumRecordLength |
Ottiene le dimensioni del record più grande che può essere aggiunto o letto da questa sequenza, in byte. |
| ReservedBytes |
Ottiene il numero totale di byte riservati. |
| RestartSequenceNumber |
Ottiene il numero di sequenza dell'area di riavvio scritta più di recente. |
| RetryAppend |
Ottiene o imposta un valore che indica se le accodamenti vengono ritentate automaticamente se il log è pieno. |
Metodi
| Nome | Descrizione |
|---|---|
| AdvanceBaseSequenceNumber(SequenceNumber) |
Sposta il numero di sequenza di base del log in avanti. Questo metodo non può essere ereditato. |
| Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection) |
Scrive un record di log in FileRecordSequence, usando lo spazio precedentemente riservato nella sequenza. Questo metodo non può essere ereditato. |
| Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions) |
Scrive un record di log in FileRecordSequence. Questo metodo non può essere ereditato. |
| Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection) |
Scrive un record di log in FileRecordSequence, usando lo spazio precedentemente riservato nella sequenza. Questo metodo non può essere ereditato. |
| Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions) |
Scrive un record di log in FileRecordSequence. Questo metodo non può essere ereditato. |
| BeginAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, AsyncCallback, Object) |
Avvia un'operazione di accodamento asincrona. Questo metodo non può essere ereditato. |
| BeginAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, AsyncCallback, Object) |
Avvia un'operazione di accodamento asincrona usando lo spazio precedentemente riservato nella sequenza. Questo metodo non può essere ereditato. |
| BeginAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, AsyncCallback, Object) |
Avvia un'operazione di accodamento asincrona. Questo metodo non può essere ereditato. |
| BeginAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, AsyncCallback, Object) |
Avvia un'operazione di accodamento asincrona usando lo spazio precedentemente riservato nella sequenza. Questo metodo non può essere ereditato. |
| BeginFlush(SequenceNumber, AsyncCallback, Object) |
Avvia un'operazione di scaricamento asincrona, usando lo spazio precedentemente riservato nella sequenza. Questo metodo non può essere ereditato. |
| BeginReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[], AsyncCallback, Object) |
Avvia un'operazione di riserva e accodamento asincrona. Questo metodo non può essere ereditato. |
| BeginReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[], AsyncCallback, Object) |
Avvia un'operazione di riserva e accodamento asincrona. Questo metodo non può essere ereditato. |
| BeginWriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection, AsyncCallback, Object) |
Avvia un'operazione di scrittura dell'area di riavvio asincrona, usando lo spazio precedentemente riservato nella sequenza. Questo metodo non può essere ereditato. |
| BeginWriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber, ReservationCollection, AsyncCallback, Object) |
Avvia un'operazione di scrittura dell'area di riavvio asincrona, usando lo spazio precedentemente riservato nella sequenza. Questo metodo non può essere ereditato. |
| CreateReservationCollection() |
Crea un nuovo ReservationCollectionoggetto . Questo metodo non può essere ereditato. |
| Dispose() |
Rilascia immediatamente le risorse non gestite usate da un oggetto . |
| EndAppend(IAsyncResult) |
Termina un'operazione di accodamento asincrona. Questo metodo non può essere ereditato. |
| EndFlush(IAsyncResult) |
Termina un'operazione di scaricamento asincrona. Questo metodo non può essere ereditato. |
| EndReserveAndAppend(IAsyncResult) |
Termina un'operazione di riserva e accodamento asincrona. Questo metodo non può essere ereditato. |
| EndWriteRestartArea(IAsyncResult) |
Termina un'operazione di scrittura dell'area di riavvio asincrona. Questo metodo non può essere ereditato. |
| Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
| Flush() |
Assicura che tutti i record accodati siano stati scritti. Questo metodo non può essere ereditato. |
| Flush(SequenceNumber) |
Assicura che tutti i record accodati siano stati scritti. Questo metodo non può essere ereditato. |
| GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
| GetType() |
Ottiene il Type dell'istanza corrente. (Ereditato da Object) |
| MemberwiseClone() |
Crea una copia superficiale del Objectcorrente. (Ereditato da Object) |
| ReadLogRecords(SequenceNumber, LogRecordEnumeratorType) |
Restituisce una raccolta enumerabile di record nella sequenza. Questo metodo non può essere ereditato. |
| ReadRestartAreas() |
Restituisce una raccolta enumerabile delle aree di riavvio nella sequenza. Questo metodo non può essere ereditato. |
| ReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[]) |
Crea automaticamente una singola prenotazione e aggiunge un record alla sequenza. Questo metodo non può essere ereditato. |
| ReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[]) |
Crea automaticamente una singola prenotazione e aggiunge un record alla sequenza. Questo metodo non può essere ereditato. |
| ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
| WriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection) |
Scrive un'area di riavvio nell'oggetto FileRecordSequence. Questo metodo non può essere ereditato. |
| WriteRestartArea(ArraySegment<Byte>, SequenceNumber) |
Scrive un'area di riavvio nell'oggetto FileRecordSequence. Questo metodo non può essere ereditato. |
| WriteRestartArea(ArraySegment<Byte>) |
Scrive un'area di riavvio nell'oggetto FileRecordSequence. Questo metodo non può essere ereditato. |
| WriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber, ReservationCollection) |
Scrive un'area di riavvio nell'oggetto FileRecordSequence. Questo metodo non può essere ereditato. |
| WriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber) |
Scrive un'area di riavvio nell'oggetto FileRecordSequence. Questo metodo non può essere ereditato. |
| WriteRestartArea(IList<ArraySegment<Byte>>) |
Scrive un'area di riavvio nell'oggetto FileRecordSequence. Questo metodo non può essere ereditato. |
Eventi
| Nome | Descrizione |
|---|---|
| TailPinned |
Si verifica quando la sequenza di record determina che la coda deve essere spostata in avanti. Questo metodo non può essere ereditato. |