FileRecordSequence Klasse

Definition

Implementiert eine IRecordSequence Datei oben in einer Datei. Diese Klasse kann nicht vererbt werden.

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
Vererbung
FileRecordSequence
Implementiert

Beispiele

Im folgenden Beispiel wird eine Datensatzsequenz erstellt, datensätze angefügt und schließlich die Datensätze gelesen.


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

Hinweise

Dies FileRecordSequence ist eine Datensatzsequenz, die auf einer einzelnen Protokolldatei im Dateisystem basiert. Es ist eine einfache Implementierung der IRecordSequence Schnittstelle, über einem einfachen dateibasierten Protokoll.

Um ein dateibasiertes Protokoll zu bearbeiten, muss das Konto, in dem Ihre Anwendung ausgeführt wird, über ausreichende Berechtigungen verfügen, wie von der Dateisystemsicherheit zum Zeitpunkt der FileRecordSequence Konstruktion festgelegt. Darüber hinaus wird zur Bauzeit ein Bedarf an FullTrust gestellt. Die Ergebnisse der Berechtigungsüberprüfung werden anschließend im Einklang mit dem Windows Sicherheitsmodell zwischengespeichert. Sie sollten sicherstellen, dass Sie den Inhalt der Datensatzsequenz nicht versehentlich für einen nicht autorisierten Benutzer verfügbar machen.

Konstruktoren

Name Beschreibung
FileRecordSequence(String, FileAccess, Int32)

Initialisiert eine neue Instanz der FileRecordSequence Klasse mit einer angegebenen Datei, einem Zugriffsmodus und einer Dateigröße.

FileRecordSequence(String, FileAccess)

Initialisiert eine neue Instanz der FileRecordSequence Klasse mit einer angegebenen Datei und einem Zugriffsmodus.

FileRecordSequence(String)

Initialisiert eine neue Instanz der FileRecordSequence Klasse mit einer angegebenen Datei.

Eigenschaften

Name Beschreibung
BaseSequenceNumber

Ruft die Sequenznummer des ersten gültigen Datensatzes im aktuellen FileRecordSequenceab.

LastSequenceNumber

Ruft die Sequenznummer ab, die größer als der letzte angefügte Datensatz ist.

MaximumRecordLength

Ruft die Größe des größten Datensatzes ab, der in Bytes an diese Sequenz angefügt oder gelesen werden kann.

ReservedBytes

Ruft die Gesamtanzahl der Bytes ab, die reserviert wurden.

RestartSequenceNumber

Ruft die Sequenznummer des zuletzt geschriebenen Neustartbereichs ab.

RetryAppend

Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob Anfüge automatisch wiederholt werden, wenn das Protokoll voll ist.

Methoden

Name Beschreibung
AdvanceBaseSequenceNumber(SequenceNumber)

Verschiebt die Basissequenznummer des Protokolls vorwärts. Diese Methode kann nicht geerbt werden.

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

Schreibt einen Protokolldatensatz in den FileRecordSequence, wobei leer, zuvor in der Sequenz reserviert wurde. Diese Methode kann nicht geerbt werden.

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

Schreibt einen Protokolldatensatz in die FileRecordSequence. Diese Methode kann nicht geerbt werden.

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

Schreibt einen Protokolldatensatz in den FileRecordSequence, wobei leer, zuvor in der Sequenz reserviert wurde. Diese Methode kann nicht geerbt werden.

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

Schreibt einen Protokolldatensatz in die FileRecordSequence. Diese Methode kann nicht geerbt werden.

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

Startet einen asynchronen Anfügevorgang. Diese Methode kann nicht geerbt werden.

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

Beginnt einen asynchronen Anfügevorgang mit dem zuvor reservierten Speicherplatz in der Sequenz. Diese Methode kann nicht geerbt werden.

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

Startet einen asynchronen Anfügevorgang. Diese Methode kann nicht geerbt werden.

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

Beginnt einen asynchronen Anfügevorgang mit dem zuvor reservierten Speicherplatz in der Sequenz. Diese Methode kann nicht geerbt werden.

BeginFlush(SequenceNumber, AsyncCallback, Object)

Beginnt einen asynchronen Flush-Vorgang, wobei der zuvor reservierte Speicherplatz in der Sequenz verwendet wird. Diese Methode kann nicht geerbt werden.

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

Startet einen asynchronen Reserve- und Anfügevorgang. Diese Methode kann nicht geerbt werden.

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

Startet einen asynchronen Reserve- und Anfügevorgang. Diese Methode kann nicht geerbt werden.

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

Startet einen asynchronen Neustartbereichsschreibvorgang unter Verwendung des zuvor reservierten Speicherplatzes in der Sequenz. Diese Methode kann nicht geerbt werden.

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

Startet einen asynchronen Neustartbereichsschreibvorgang unter Verwendung des zuvor reservierten Speicherplatzes in der Sequenz. Diese Methode kann nicht geerbt werden.

CreateReservationCollection()

Erstellt ein neues ReservationCollection. Diese Methode kann nicht geerbt werden.

Dispose()

Gibt sofort die nicht verwalteten Ressourcen frei, die von einem Objekt verwendet werden.

EndAppend(IAsyncResult)

Beendet einen asynchronen Anfügevorgang. Diese Methode kann nicht geerbt werden.

EndFlush(IAsyncResult)

Beendet einen asynchronen Leerenvorgang. Diese Methode kann nicht geerbt werden.

EndReserveAndAppend(IAsyncResult)

Beendet einen asynchronen Reserve- und Anfügevorgang. Diese Methode kann nicht geerbt werden.

EndWriteRestartArea(IAsyncResult)

Beendet einen asynchronen Neustartbereich-Schreibvorgang. Diese Methode kann nicht geerbt werden.

Equals(Object)

Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht.

(Geerbt von Object)
Flush()

Stellt sicher, dass alle angefügten Datensätze geschrieben wurden. Diese Methode kann nicht geerbt werden.

Flush(SequenceNumber)

Stellt sicher, dass alle angefügten Datensätze geschrieben wurden. Diese Methode kann nicht geerbt werden.

GetHashCode()

Dient als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
ReadLogRecords(SequenceNumber, LogRecordEnumeratorType)

Gibt eine aufzählbare Auflistung von Datensätzen in der Sequenz zurück. Diese Methode kann nicht geerbt werden.

ReadRestartAreas()

Gibt eine aufzählbare Auflistung der Neustartbereiche in der Sequenz zurück. Diese Methode kann nicht geerbt werden.

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

Führt automatisch eine einzelne Reservierung durch und fügt einen Datensatz an die Sequenz an. Diese Methode kann nicht geerbt werden.

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

Führt automatisch eine einzelne Reservierung durch und fügt einen Datensatz an die Sequenz an. Diese Methode kann nicht geerbt werden.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)
WriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection)

Schreibt einen Neustartbereich in den FileRecordSequence. Diese Methode kann nicht geerbt werden.

WriteRestartArea(ArraySegment<Byte>, SequenceNumber)

Schreibt einen Neustartbereich in den FileRecordSequence. Diese Methode kann nicht geerbt werden.

WriteRestartArea(ArraySegment<Byte>)

Schreibt einen Neustartbereich in den FileRecordSequence. Diese Methode kann nicht geerbt werden.

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

Schreibt einen Neustartbereich in den FileRecordSequence. Diese Methode kann nicht geerbt werden.

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

Schreibt einen Neustartbereich in den FileRecordSequence. Diese Methode kann nicht geerbt werden.

WriteRestartArea(IList<ArraySegment<Byte>>)

Schreibt einen Neustartbereich in den FileRecordSequence. Diese Methode kann nicht geerbt werden.

Ereignisse

Name Beschreibung
TailPinned

Tritt auf, wenn die Datensatzsequenz bestimmt, dass der Schwanz vorwärts verschoben werden muss. Diese Methode kann nicht geerbt werden.

Gilt für: