FileRecordSequence.Append Methode

Definitie

Hiermee schrijft u een logboekrecord naar de FileRecordSequence.

Overloads

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

Hiermee schrijft u een logboekrecord naar de FileRecordSequence. Deze methode kan niet worden overgenomen.

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

Hiermee schrijft u een logboekrecord naar de FileRecordSequence. Deze methode kan niet worden overgenomen.

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

Hiermee schrijft u een logboekrecord naar de FileRecordSequence, met behulp van ruimte die eerder in de reeks is gereserveerd. Deze methode kan niet worden overgenomen.

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

Hiermee schrijft u een logboekrecord naar de FileRecordSequence, met behulp van ruimte die eerder in de reeks is gereserveerd. Deze methode kan niet worden overgenomen.

Voorbeelden

In het volgende voorbeeld wordt een recordreeks gemaakt, wordt er een record aan toegevoegd en worden de records ten slotte gelezen.


using System;
using System.IO;
using System.IO.Log;
using System.Collections.Generic;
using System.Text;

namespace MyFileRecordSequence
{

class ReadRecordsSample
{
    static SequenceNumber AppendRecord(IRecordSequence sequence, string message, SequenceNumber user, SequenceNumber previous)
    {
        MemoryStream data = new MemoryStream();
        BinaryWriter writer = new BinaryWriter(data);
        writer.Write(message); ArraySegment<byte>[] segments;
        segments = new ArraySegment<byte>[1];
        segments[0] = new ArraySegment<byte>(data.GetBuffer(), 0, (int)data.Length);
        return sequence.Append(segments, user, previous,RecordAppendOptions.None);
    }
    public static void Main(string[] args)
    {
        IRecordSequence sequence;
        sequence = new FileRecordSequence(args[0]);
        SequenceNumber a, b, c, d;
        a = AppendRecord(sequence, "This is record A", SequenceNumber.Invalid, SequenceNumber.Invalid);
        Console.WriteLine("Record A has sequence number System.IO.Log", a);
        b = AppendRecord(sequence, "This is record B", a, a);
        Console.WriteLine("Record B has sequence number System.IO.Log", b);
        c = AppendRecord(sequence, "This is record C", a, a);
        Console.WriteLine("Record C has sequence number System.IO.Log", c);
        d = AppendRecord(sequence, "This is record D", b, c);
        Console.WriteLine("Record D has sequence number System.IO.Log", d);
        foreach(LogRecord record in sequence.ReadLogRecords(a,LogRecordEnumeratorType.Next))
        {
            BinaryReader reader = new BinaryReader(record.Data);
            Console.WriteLine("System.IO.Log: T:System.IO.Log.IRecordSequence", record.SequenceNumber, reader.ReadString());
        }
        foreach(LogRecord record in sequence.ReadLogRecords(d, LogRecordEnumeratorType.User))
        {
            BinaryReader reader = new BinaryReader(record.Data);
            Console.WriteLine("System.IO.Log: T:System.IO.Log.IRecordSequence", record.SequenceNumber, reader.ReadString());
        }
        foreach(LogRecord record in sequence.ReadLogRecords(d, LogRecordEnumeratorType.Previous))
        {
            BinaryReader reader = new BinaryReader(record.Data);
            Console.WriteLine("System.IO.Log: T:System.IO.Log.IRecordSequence", record.SequenceNumber, reader.ReadString());
        }
    }
}
Imports System.IO
Imports System.IO.Log
Imports System.Collections.Generic
Imports System.Text


Namespace MyFileRecordSequence


Friend Class ReadRecordsSample
    Private Shared Function AppendRecord(ByVal sequence As IRecordSequence, ByVal message As String, ByVal user As SequenceNumber, ByVal previous As SequenceNumber) As SequenceNumber
        Dim data As New MemoryStream()
        Dim writer As New BinaryWriter(data)
        writer.Write(message)
        Dim segments() As ArraySegment(Of Byte)
        segments = New ArraySegment(Of Byte)(0){}
        segments(0) = New ArraySegment(Of Byte)(data.GetBuffer(), 0, CInt(Fix(data.Length)))
        Return sequence.Append(segments, user, previous,RecordAppendOptions.None)
    End Function
    Public Shared Sub Main(ByVal args() As String)
        Dim sequence As IRecordSequence
        sequence = New FileRecordSequence(args(0))
        Dim a, b, c, d As SequenceNumber
        a = AppendRecord(sequence, "This is record A", SequenceNumber.Invalid, SequenceNumber.Invalid)
        Console.WriteLine("Record A has sequence number System.IO.Log", a)
        b = AppendRecord(sequence, "This is record B", a, a)
        Console.WriteLine("Record B has sequence number System.IO.Log", b)
        c = AppendRecord(sequence, "This is record C", a, a)
        Console.WriteLine("Record C has sequence number System.IO.Log", c)
        d = AppendRecord(sequence, "This is record D", b, c)
        Console.WriteLine("Record D has sequence number System.IO.Log", d)
            For Each record In sequence.ReadLogRecords(a, LogRecordEnumeratorType.Next)
                Dim reader As New BinaryReader(record.Data)
                Console.WriteLine("System.IO.Log: T:System.IO.Log.IRecordSequence", record.SequenceNumber, reader.ReadString())
            Next record
            For Each record In sequence.ReadLogRecords(d, LogRecordEnumeratorType.User)
                Dim reader As New BinaryReader(record.Data)
                Console.WriteLine("System.IO.Log: T:System.IO.Log.IRecordSequence", record.SequenceNumber, reader.ReadString())
            Next record
            For Each record In sequence.ReadLogRecords(d, LogRecordEnumeratorType.Previous)
                Dim reader As New BinaryReader(record.Data)
                Console.WriteLine("System.IO.Log: T:System.IO.Log.IRecordSequence", record.SequenceNumber, reader.ReadString())
            Next record
    End Sub
End Class

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

Hiermee schrijft u een logboekrecord naar de FileRecordSequence. Deze methode kan niet worden overgenomen.

public:
 virtual System::IO::Log::SequenceNumber Append(ArraySegment<System::Byte> data, System::IO::Log::SequenceNumber nextUndoRecord, System::IO::Log::SequenceNumber previousRecord, System::IO::Log::RecordAppendOptions recordAppendOptions);
public System.IO.Log.SequenceNumber Append(ArraySegment<byte> data, System.IO.Log.SequenceNumber nextUndoRecord, System.IO.Log.SequenceNumber previousRecord, System.IO.Log.RecordAppendOptions recordAppendOptions);
abstract member Append : ArraySegment<byte> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions -> System.IO.Log.SequenceNumber
override this.Append : ArraySegment<byte> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions -> System.IO.Log.SequenceNumber
Public Function Append (data As ArraySegment(Of Byte), nextUndoRecord As SequenceNumber, previousRecord As SequenceNumber, recordAppendOptions As RecordAppendOptions) As SequenceNumber

Parameters

data
ArraySegment<Byte>

Een lijst met bytematrixsegmenten die als record worden samengevoegd en toegevoegd.

nextUndoRecord
SequenceNumber

Het volgnummer van de volgende record in de door de gebruiker opgegeven volgorde.

previousRecord
SequenceNumber

Het volgnummer van de volgende record in vorige volgorde.

recordAppendOptions
RecordAppendOptions

Een geldige waarde hiervan RecordAppendOptions geeft aan hoe de gegevens moeten worden geschreven.

Retouren

Het volgnummer van de toegevoegde logboekrecord.

Implementeringen

Uitzonderingen

Een of meer van de argumenten zijn null.

Een of meer van de argumenten vallen buiten het bereik.

De bewerking kan niet worden uitgevoerd omdat de recordreeks is geopend met alleen-lezentoegang.

De aanvraag kan niet worden uitgevoerd vanwege een onverwachte I/O-uitzondering.

De methode is aangeroepen nadat de reeks is verwijderd.

Er is onvoldoende geheugen om door te gaan met de uitvoering van het programma.

De recordreeks is vol.

Voorbeelden

In het volgende voorbeeld wordt een recordreeks gemaakt, wordt er een record aan toegevoegd en worden de records ten slotte gelezen.

using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System.IO.Log;

namespace MyFileRecordSequence
{
    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 Array of ArraSegment<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 Main(string[] args)
        {
            MyLog log = new MyLog();

            log.AppendRecords();
            log.ReadRecords();
            log.Cleanup();
        }
    }
}

Opmerkingen

Gegevens in de data parameter worden samengevoegd in één bytematrix voor het toevoegen als record. Er wordt echter geen inrichting gemaakt voor het terugsplitsen van gegevens in matrixsegmenten wanneer de record wordt gelezen.

Normaal gesproken wordt deze methode voltooid voordat de record is geschreven. Als u ervoor wilt zorgen dat een record is geschreven, geeft u de ForceFlush vlag op met behulp van de recordAppendOptions parameter of roept u de methode aan Flush .

Van toepassing op

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

Hiermee schrijft u een logboekrecord naar de FileRecordSequence. Deze methode kan niet worden overgenomen.

public:
 virtual System::IO::Log::SequenceNumber Append(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ data, System::IO::Log::SequenceNumber nextUndoRecord, System::IO::Log::SequenceNumber previousRecord, System::IO::Log::RecordAppendOptions recordAppendOptions);
public System.IO.Log.SequenceNumber Append(System.Collections.Generic.IList<ArraySegment<byte>> data, System.IO.Log.SequenceNumber nextUndoRecord, System.IO.Log.SequenceNumber previousRecord, System.IO.Log.RecordAppendOptions recordAppendOptions);
abstract member Append : System.Collections.Generic.IList<ArraySegment<byte>> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions -> System.IO.Log.SequenceNumber
override this.Append : System.Collections.Generic.IList<ArraySegment<byte>> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions -> System.IO.Log.SequenceNumber
Public Function Append (data As IList(Of ArraySegment(Of Byte)), nextUndoRecord As SequenceNumber, previousRecord As SequenceNumber, recordAppendOptions As RecordAppendOptions) As SequenceNumber

Parameters

data
IList<ArraySegment<Byte>>

Een lijst met bytematrixsegmenten die als record worden samengevoegd en toegevoegd.

nextUndoRecord
SequenceNumber

Het volgnummer van de volgende record in de door de gebruiker opgegeven volgorde.

previousRecord
SequenceNumber

Het volgnummer van de volgende record in vorige volgorde.

recordAppendOptions
RecordAppendOptions

Een geldige waarde hiervan RecordAppendOptions geeft aan hoe de gegevens moeten worden geschreven.

Retouren

Het volgnummer van de toegevoegde logboekrecord.

Implementeringen

Uitzonderingen

Een of meer van de argumenten zijn null.

Een of meer van de argumenten vallen buiten het bereik.

De bewerking kan niet worden uitgevoerd omdat de recordreeks is geopend met alleen-lezentoegang.

De aanvraag kan niet worden uitgevoerd vanwege een onverwachte I/O-uitzondering.

De methode is aangeroepen nadat de reeks is verwijderd.

Er is onvoldoende geheugen om door te gaan met de uitvoering van het programma.

De recordreeks is vol.

Voorbeelden

In het volgende voorbeeld ziet u hoe u met deze methode een recordreeks kunt maken.

// 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...");
    }
' 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

Opmerkingen

Gegevens in de data parameter worden samengevoegd in één bytematrix voor het toevoegen als record. Er wordt echter geen inrichting gemaakt voor het terugsplitsen van gegevens in matrixsegmenten wanneer de record wordt gelezen.

Normaal gesproken wordt deze methode voltooid voordat de record is geschreven. Als u ervoor wilt zorgen dat een record is geschreven, geeft u de ForceFlush vlag op met behulp van de recordAppendOptions parameter of roept u de methode aan Flush .

Van toepassing op

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

Hiermee schrijft u een logboekrecord naar de FileRecordSequence, met behulp van ruimte die eerder in de reeks is gereserveerd. Deze methode kan niet worden overgenomen.

public:
 virtual System::IO::Log::SequenceNumber Append(ArraySegment<System::Byte> data, System::IO::Log::SequenceNumber nextUndoRecord, System::IO::Log::SequenceNumber previousRecord, System::IO::Log::RecordAppendOptions recordAppendOptions, System::IO::Log::ReservationCollection ^ reservations);
public System.IO.Log.SequenceNumber Append(ArraySegment<byte> data, System.IO.Log.SequenceNumber nextUndoRecord, System.IO.Log.SequenceNumber previousRecord, System.IO.Log.RecordAppendOptions recordAppendOptions, System.IO.Log.ReservationCollection reservations);
abstract member Append : ArraySegment<byte> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions * System.IO.Log.ReservationCollection -> System.IO.Log.SequenceNumber
override this.Append : ArraySegment<byte> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions * System.IO.Log.ReservationCollection -> System.IO.Log.SequenceNumber
Public Function Append (data As ArraySegment(Of Byte), nextUndoRecord As SequenceNumber, previousRecord As SequenceNumber, recordAppendOptions As RecordAppendOptions, reservations As ReservationCollection) As SequenceNumber

Parameters

data
ArraySegment<Byte>

Een lijst met bytematrixsegmenten die als record worden samengevoegd en toegevoegd.

nextUndoRecord
SequenceNumber

Het volgnummer van de volgende record in de door de gebruiker opgegeven volgorde.

previousRecord
SequenceNumber

Het volgnummer van de volgende record in vorige volgorde.

recordAppendOptions
RecordAppendOptions

Een geldige waarde hiervan RecordAppendOptions geeft aan hoe de gegevens moeten worden geschreven.

reservations
ReservationCollection

Een ReservationCollection die de reservering bevat die moet worden gebruikt voor deze record.

Retouren

Het volgnummer van de toegevoegde logboekrecord.

Implementeringen

Uitzonderingen

Een of meer van de argumenten zijn null.

Een of meer van de argumenten vallen buiten het bereik.

reservations is niet gemaakt door deze recordreeks.

De bewerking kan niet worden uitgevoerd omdat de recordreeks is geopend met alleen-lezentoegang.

De aanvraag kan niet worden uitgevoerd vanwege een onverwachte I/O-uitzondering.

De methode is aangeroepen nadat de reeks is verwijderd.

Er is onvoldoende geheugen om door te gaan met de uitvoering van het programma.

De recordreeks is vol.

Er is geen reservering groot genoeg om in te passendata.reservations

Opmerkingen

Gegevens in de data parameter worden samengevoegd in één bytematrix voor het toevoegen als record. Er wordt echter geen inrichting gemaakt voor het terugsplitsen van gegevens in matrixsegmenten wanneer de record wordt gelezen.

De toegevoegde record verbruikt ruimte die eerder is gereserveerd, met behulp van een reservering die is opgegeven door de reservations parameter. Als de toevoeg slaagt, wordt het kleinste reserveringsgebied gebruikt dat de gegevens kan bevatten en wordt dat reserveringsgebied uit de verzameling verwijderd.

Normaal gesproken wordt deze methode voltooid voordat de record is geschreven. Als u ervoor wilt zorgen dat een record is geschreven, geeft u de ForceFlush vlag op met behulp van de recordAppendOptions parameter of roept u de methode aan Flush .

Van toepassing op

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

Hiermee schrijft u een logboekrecord naar de FileRecordSequence, met behulp van ruimte die eerder in de reeks is gereserveerd. Deze methode kan niet worden overgenomen.

public:
 virtual System::IO::Log::SequenceNumber Append(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ data, System::IO::Log::SequenceNumber nextUndoRecord, System::IO::Log::SequenceNumber previousRecord, System::IO::Log::RecordAppendOptions recordAppendOptions, System::IO::Log::ReservationCollection ^ reservations);
public System.IO.Log.SequenceNumber Append(System.Collections.Generic.IList<ArraySegment<byte>> data, System.IO.Log.SequenceNumber nextUndoRecord, System.IO.Log.SequenceNumber previousRecord, System.IO.Log.RecordAppendOptions recordAppendOptions, System.IO.Log.ReservationCollection reservations);
abstract member Append : System.Collections.Generic.IList<ArraySegment<byte>> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions * System.IO.Log.ReservationCollection -> System.IO.Log.SequenceNumber
override this.Append : System.Collections.Generic.IList<ArraySegment<byte>> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions * System.IO.Log.ReservationCollection -> System.IO.Log.SequenceNumber
Public Function Append (data As IList(Of ArraySegment(Of Byte)), nextUndoRecord As SequenceNumber, previousRecord As SequenceNumber, recordAppendOptions As RecordAppendOptions, reservations As ReservationCollection) As SequenceNumber

Parameters

data
IList<ArraySegment<Byte>>

Een lijst met bytematrixsegmenten die als record worden samengevoegd en toegevoegd.

nextUndoRecord
SequenceNumber

Het volgnummer van de volgende record in de door de gebruiker opgegeven volgorde.

previousRecord
SequenceNumber

Het volgnummer van de volgende record in vorige volgorde.

recordAppendOptions
RecordAppendOptions

Een geldige waarde hiervan RecordAppendOptions geeft aan hoe de gegevens moeten worden geschreven.

reservations
ReservationCollection

Een ReservationCollection die de reservering bevat die moet worden gebruikt voor deze record.

Retouren

Het volgnummer van de toegevoegde logboekrecord.

Implementeringen

Uitzonderingen

Een of meer van de argumenten zijn null.

Een of meer van de argumenten vallen buiten het bereik.

reservations is niet gemaakt door deze recordreeks.

De bewerking kan niet worden uitgevoerd omdat de recordreeks is geopend met alleen-lezentoegang.

De aanvraag kan niet worden uitgevoerd vanwege een onverwachte I/O-uitzondering.

De methode is aangeroepen nadat de reeks is verwijderd.

Er is onvoldoende geheugen om door te gaan met de uitvoering van het programma.

De recordreeks is vol.

Er is geen reservering groot genoeg om in te passendata.reservations

Opmerkingen

Gegevens in de data parameter worden samengevoegd in één bytematrix voor het toevoegen als record. Er wordt echter geen inrichting gemaakt voor het terugsplitsen van gegevens in matrixsegmenten wanneer de record wordt gelezen.

De toegevoegde record verbruikt ruimte die eerder is gereserveerd, met behulp van een reservering die is opgegeven door de reservations parameter. Als de toevoeg slaagt, wordt het kleinste reserveringsgebied gebruikt dat de gegevens kan bevatten en wordt dat reserveringsgebied uit de verzameling verwijderd.

Normaal gesproken wordt deze methode voltooid voordat de record is geschreven. Als u ervoor wilt zorgen dat een record is geschreven, geeft u de ForceFlush vlag op met behulp van de recordAppendOptions parameter of roept u de methode aan Flush .

Van toepassing op