FileRecordSequence Classe

Definizione

Implementa un oggetto IRecordSequence in un file.Implements an IRecordSequence on top of a file. Questa classe non può essere ereditata.This class cannot be inherited.

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

Esempi

Nell'esempio seguente viene creata una sequenza di record, vi vengono aggiunti record che vengono quindi letti.The following example creates a record sequence, appends record to it, and finally reads the records.


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 unico file di log nel file system.The FileRecordSequence is a record sequence based on a single log file in the file system. È una semplice implementazione dell'interfaccia IRecordSequence, in un contesto di semplice log basato su file.It is a simple implementation of the IRecordSequence interface, on top of a simple file-based log.

Per modificare un log basato su file, l'account sotto cui è in esecuzione l'applicazione deve disporre di privilegi sufficienti, come imposto dalla sicurezza del file system al momento della costruzione di FileRecordSequence.To manipulate a file-based log, the account that your application is running in must have sufficient privileges, as dictated by the file system security at the time the FileRecordSequence is constructed. Inoltre, durante la costruzione viene effettuata una richiesta di FullTrust.In addition, a demand for FullTrust is made at construction time. Da questo momento, i risultati della verifica di autorizzazione vengono memorizzati nella cache, congiuntamente al modello di sicurezza di Windows.The permission verification results are cached thereafter in keeping with the Windows security model. È necessario essere certi di non esporre accidentalmente il contenuto della sequenza di record a un utente non autorizzato.You should ensure that you do not accidentally expose the contents of the record sequence to an unauthorized user.

Costruttori

FileRecordSequence(String)

Inizializza una nuova istanza della classe FileRecordSequence con un file specificato.Initializes a new instance of the FileRecordSequence class with a specified file.

FileRecordSequence(String, FileAccess)

Inizializza una nuova istanza della classe FileRecordSequence con il file e la modalità di accesso specificati.Initializes a new instance of the FileRecordSequence class with a specified file and an access mode.

FileRecordSequence(String, FileAccess, Int32)

Inizializza una nuova istanza della classe FileRecordSequence con il file, la modalità di accesso e la dimensione del file specificati.Initializes a new instance of the FileRecordSequence class with a specified file, an access mode, and a file size.

Proprietà

BaseSequenceNumber

Ottiene il numero di sequenza del primo record valido dell'oggetto FileRecordSequence corrente.Gets the sequence number of the first valid record in the current FileRecordSequence.

LastSequenceNumber

Ottiene il numero di sequenza maggiore dell'ultimo record aggiunto.Gets the sequence number which is greater than the last record appended.

MaximumRecordLength

Ottiene la dimensione del record più grande, in byte, che può essere accodato alla sequenza o letto da quest'ultima.Gets the size of the largest record that can be appended to or read from this sequence, in bytes.

ReservedBytes

Ottiene il numero totale di byte che sono stati riservati.Gets the total number of bytes that have been reserved.

RestartSequenceNumber

Ottiene il numero di sequenza dell'area di riavvio scritta più recentemente.Gets the sequence number of the most recently written restart area.

RetryAppend

Ottiene o imposta un valore che indica se le operazioni di accodamento vengono ripetute automaticamente nel caso in cui il log sia pieno.Gets or sets a value indicating whether or not appends are automatically retried if the log is full.

Metodi

AdvanceBaseSequenceNumber(SequenceNumber)

Sposta in avanti il numero di sequenza di base del log.Moves the base sequence number of the log forward. Questo metodo non può essere ereditato.This method cannot be inherited.

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

Scrive un record di log in FileRecordSequence.Writes a log record to the FileRecordSequence. Questo metodo non può essere ereditato.This method cannot be inherited.

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

Scrive un record di log in FileRecordSequence utilizzando spazio precedentemente riservato nella sequenza.Writes a log record to the FileRecordSequence, using space previously reserved in the sequence. Questo metodo non può essere ereditato.This method cannot be inherited.

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

Scrive un record di log in FileRecordSequence.Writes a log record to the FileRecordSequence. Questo metodo non può essere ereditato.This method cannot be inherited.

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

Scrive un record di log in FileRecordSequence utilizzando spazio precedentemente riservato nella sequenza.Writes a log record to the FileRecordSequence, using space previously reserved in the sequence. Questo metodo non può essere ereditato.This method cannot be inherited.

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

Avvia un'operazione di accodamento asincrona.Begins an asynchronous append operation. Questo metodo non può essere ereditato.This method cannot be inherited.

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

Avvia un'operazione asincrona di accodamento, utilizzando spazio precedentemente riservato nella sequenza.Begins an asynchronous append operation using space previously reserved in the sequence. Questo metodo non può essere ereditato.This method cannot be inherited.

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

Avvia un'operazione di accodamento asincrona.Begins an asynchronous append operation. Questo metodo non può essere ereditato.This method cannot be inherited.

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

Avvia un'operazione asincrona di accodamento, utilizzando spazio precedentemente riservato nella sequenza.Begins an asynchronous append operation using space previously reserved in the sequence. Questo metodo non può essere ereditato.This method cannot be inherited.

BeginFlush(SequenceNumber, AsyncCallback, Object)

Avvia un'operazione di scaricamento asincrono, utilizzando spazio precedentemente riservato nella sequenza.Begins an asynchronous flush operation, using space previously reserved in the sequence. Questo metodo non può essere ereditato.This method cannot be inherited.

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

Avvia un'operazione asincrona di prenotazione e accodamento.Begins an asynchronous reserve and append operation. Questo metodo non può essere ereditato.This method cannot be inherited.

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

Avvia un'operazione asincrona di prenotazione e accodamento.Begins an asynchronous reserve and append operation. Questo metodo non può essere ereditato.This method cannot be inherited.

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

Avvia un'operazione asincrona di scrittura dell'area di riavvio utilizzando spazio precedentemente riservato nella sequenza.Begins an asynchronous restart area write operation, using space previously reserved in the sequence. Questo metodo non può essere ereditato.This method cannot be inherited.

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

Avvia un'operazione asincrona di scrittura dell'area di riavvio utilizzando spazio precedentemente riservato nella sequenza.Begins an asynchronous restart area write operation, using space previously reserved in the sequence. Questo metodo non può essere ereditato.This method cannot be inherited.

CreateReservationCollection()

Crea un nuovo oggetto ReservationCollection.Creates a new ReservationCollection. Questo metodo non può essere ereditato.This method cannot be inherited.

Dispose()

Rilascia immediatamente le risorse non gestite utilizzate da un oggetto.Immediately releases the unmanaged resources used by an object.

EndAppend(IAsyncResult)

Termina un'operazione di accodamento asincrona.Ends an asynchronous append operation. Questo metodo non può essere ereditato.This method cannot be inherited.

EndFlush(IAsyncResult)

Termina un'operazione di scaricamento asincrono.Ends an asynchronous flush operation. Questo metodo non può essere ereditato.This method cannot be inherited.

EndReserveAndAppend(IAsyncResult)

Termina un'operazione asincrona di prenotazione e accodamento.Ends an asynchronous reserve and append operation. Questo metodo non può essere ereditato.This method cannot be inherited.

EndWriteRestartArea(IAsyncResult)

Termina un'operazione asincrona di scrittura dell'area di riavvio.Ends an asynchronous restart area write operation. Questo metodo non può essere ereditato.This method cannot be inherited.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

(Ereditato da Object)
Flush()

Garantisce la scrittura di tutti i record aggiunti.Ensures that all appended records have been written. Questo metodo non può essere ereditato.This method cannot be inherited.

Flush(SequenceNumber)

Garantisce la scrittura di tutti i record aggiunti.Ensures that all appended records have been written. Questo metodo non può essere ereditato.This method cannot be inherited.

GetHashCode()

Funge da funzione hash predefinita.Serves as the default hash function.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Ereditato da Object)
ReadLogRecords(SequenceNumber, LogRecordEnumeratorType)

Restituisce una raccolta enumerabile di record inclusi nella sequenza.Returns an enumerable collection of records in the sequence. Questo metodo non può essere ereditato.This method cannot be inherited.

ReadRestartAreas()

Restituisce una raccolta enumerabile delle aree di riavvio contenute nella sequenza.Returns an enumerable collection of the restart areas in the sequence. Questo metodo non può essere ereditato.This method cannot be inherited.

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

Crea automaticamente una sola prenotazione e accoda un record alla sequenza.Automatically makes a single reservation and appends a record to the sequence. Questo metodo non può essere ereditato.This method cannot be inherited.

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

Crea automaticamente una sola prenotazione e accoda un record alla sequenza.Automatically makes a single reservation and appends a record to the sequence. Questo metodo non può essere ereditato.This method cannot be inherited.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

(Ereditato da Object)
WriteRestartArea(ArraySegment<Byte>)

Scrive un'area di riavvio in FileRecordSequence.Writes a restart area to the FileRecordSequence. Questo metodo non può essere ereditato.This method cannot be inherited.

WriteRestartArea(ArraySegment<Byte>, SequenceNumber)

Scrive un'area di riavvio in FileRecordSequence.Writes a restart area to the FileRecordSequence. Questo metodo non può essere ereditato.This method cannot be inherited.

WriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection)

Scrive un'area di riavvio in FileRecordSequence.Writes a restart area to the FileRecordSequence. Questo metodo non può essere ereditato.This method cannot be inherited.

WriteRestartArea(IList<ArraySegment<Byte>>)

Scrive un'area di riavvio in FileRecordSequence.Writes a restart area to the FileRecordSequence. Questo metodo non può essere ereditato.This method cannot be inherited.

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

Scrive un'area di riavvio in FileRecordSequence.Writes a restart area to the FileRecordSequence. Questo metodo non può essere ereditato.This method cannot be inherited.

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

Scrive un'area di riavvio in FileRecordSequence.Writes a restart area to the FileRecordSequence. Questo metodo non può essere ereditato.This method cannot be inherited.

Eventi

TailPinned

Si verifica quando la sequenza di record determina che la coda deve essere spostata in avanti.Occurs when the record sequence determines that the tail must be moved forward. Questo metodo non può essere ereditato.This method cannot be inherited.

Si applica a