Freigeben über


FileRecordSequence Klasse

Definition

Implementiert eine IRecordSequence zusätzlich zu 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 werden angefügt, und schließlich werden 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

Die FileRecordSequence ist eine auf einer einzelnen Protokolldatei im Dateisystem basierende Datensatzsequenz. Hierbei handelt es sich um eine einfache Implementierung der IRecordSequence-Schnittstelle zusätzlich zum einfachen dateibasierten Protokoll.

Für die Bearbeitung eines dateibasierten Protokolls muss das Konto, in dem Ihre Anwendung läuft, über ausreichende Berechtigungen verfügen, die durch die Dateisystemsicherheit zum Zeitpunkt der Erstellung der FileRecordSequence festgelegt werden. Darüber hinaus wird während der Erstellung eine Anforderung von FullTrust ausgegeben. Die Ergebnisse der Berechtigungsüberprüfung werden anschließend gemäß dem Windows-Sicherheitsmodell zwischengespeichert. Sie müssen sicherstellen, dass der Inhalt der Datensatzsequenz nicht versehentlich für einen unberechtigten Benutzer verfügbar wird.

Konstruktoren

FileRecordSequence(String)

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

FileRecordSequence(String, FileAccess)

Initialisiert eine neue Instanz der FileRecordSequence-Klasse mit der Angabe einer Datei und eines Zugriffsmodus.

FileRecordSequence(String, FileAccess, Int32)

Initialisiert eine neue Instanz der FileRecordSequence-Klasse mit der Angabe einer Datei, eines Zugriffsmodus und einer Dateigröße.

Eigenschaften

BaseSequenceNumber

Ruft die Sequenznummer des ersten gültigen Datensatzes in der FileRecordSequence ab.

LastSequenceNumber

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

MaximumRecordLength

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

ReservedBytes

Ruft die Gesamtanzahl von Byte ab, die reserviert wurden.

RestartSequenceNumber

Ruft die Sequenznummer des zuletzt geschriebenen Neustartbereichs ab.

RetryAppend

Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob Anfügevorgänge automatisch wiederholt werden, wenn das Protokoll voll ist.

Methoden

AdvanceBaseSequenceNumber(SequenceNumber)

Rückt die Basissequenznummer des Protokolls vor. Diese Methode kann nicht vererbt werden.

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

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

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

Schreibt mithilfe von zuvor in der Sequenz reserviertem Speicherplatz einen Protokolldatensatz in die FileRecordSequence. Diese Methode kann nicht vererbt werden.

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

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

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

Schreibt mithilfe von zuvor in der Sequenz reserviertem Speicherplatz einen Protokolldatensatz in die FileRecordSequence. Diese Methode kann nicht vererbt werden.

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

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

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

Startet einen asynchronen Anfügevorgang und verwendet Speicherplatz, der zuvor in der Sequenz reserviert wurde. Diese Methode kann nicht vererbt werden.

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

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

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

Startet einen asynchronen Anfügevorgang und verwendet Speicherplatz, der zuvor in der Sequenz reserviert wurde. Diese Methode kann nicht vererbt werden.

BeginFlush(SequenceNumber, AsyncCallback, Object)

Startet einen asynchronen Löschvorgang und verwendet Speicherplatz, der zuvor in der Sequenz reserviert wurde. Diese Methode kann nicht vererbt werden.

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

Startet einen asynchronen Reservierungs- und Anfügevorgang. Diese Methode kann nicht vererbt werden.

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

Startet einen asynchronen Reservierungs- und Anfügevorgang. Diese Methode kann nicht vererbt werden.

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

Startet einen asynchronen Neustartbereich-Schreibvorgang, wobei der zuvor in der Sequenz reservierte Speicherplatz verwendet wird. Diese Methode kann nicht vererbt werden.

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

Startet einen asynchronen Neustartbereich-Schreibvorgang, wobei der zuvor in der Sequenz reservierte Speicherplatz verwendet wird. Diese Methode kann nicht vererbt werden.

CreateReservationCollection()

Erstellt einen neuen ReservationCollection. Diese Methode kann nicht vererbt werden.

Dispose()

Gibt die von einem Objekt verwendeten nicht verwalteten Ressourcen unverzüglich frei.

EndAppend(IAsyncResult)

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

EndFlush(IAsyncResult)

Beendet einen asynchronen Löschvorgang. Diese Methode kann nicht vererbt werden.

EndReserveAndAppend(IAsyncResult)

Beendet einen asynchronen Reservierungs- und Anfügevorgang. Diese Methode kann nicht vererbt werden.

EndWriteRestartArea(IAsyncResult)

Beendet einen asynchronen Neustartbereichsschreibvorgang. Diese Methode kann nicht vererbt werden.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
Flush()

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

Flush(SequenceNumber)

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

GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ReadLogRecords(SequenceNumber, LogRecordEnumeratorType)

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

ReadRestartAreas()

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

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

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

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

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

ToString()

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

(Geerbt von Object)
WriteRestartArea(ArraySegment<Byte>)

Schreibt einen Neustartbereich in die FileRecordSequence. Diese Methode kann nicht vererbt werden.

WriteRestartArea(ArraySegment<Byte>, SequenceNumber)

Schreibt einen Neustartbereich in die FileRecordSequence. Diese Methode kann nicht vererbt werden.

WriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection)

Schreibt einen Neustartbereich in die FileRecordSequence. Diese Methode kann nicht vererbt werden.

WriteRestartArea(IList<ArraySegment<Byte>>)

Schreibt einen Neustartbereich in die FileRecordSequence. Diese Methode kann nicht vererbt werden.

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

Schreibt einen Neustartbereich in die FileRecordSequence. Diese Methode kann nicht vererbt werden.

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

Schreibt einen Neustartbereich in die FileRecordSequence. Diese Methode kann nicht vererbt werden.

Ereignisse

TailPinned

Tritt auf, wenn die Datensatzsequenz bestimmt, dass das Ende vorgerückt werden muss. Diese Methode kann nicht vererbt werden.

Gilt für: