FileRecordSequence.Append Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Écrit un enregistrement de journal dans le FileRecordSequencefichier journal .
Surcharges
| Nom | Description |
|---|---|
| Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions) |
Écrit un enregistrement de journal dans le FileRecordSequencefichier journal . Cette méthode ne peut pas être héritée. |
| Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions) |
Écrit un enregistrement de journal dans le FileRecordSequencefichier journal . Cette méthode ne peut pas être héritée. |
| Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection) |
Écrit un enregistrement de journal dans l’espace FileRecordSequenceprécédemment réservé dans la séquence. Cette méthode ne peut pas être héritée. |
| Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection) |
Écrit un enregistrement de journal dans l’espace FileRecordSequenceprécédemment réservé dans la séquence. Cette méthode ne peut pas être héritée. |
Exemples
L’exemple suivant crée une séquence d’enregistrements, y ajoute un enregistrement et lit enfin les enregistrements.
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)
Écrit un enregistrement de journal dans le FileRecordSequencefichier journal . Cette méthode ne peut pas être héritée.
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
Paramètres
- data
- ArraySegment<Byte>
Liste des segments de tableau d’octets qui seront concaténés et ajoutés en tant qu’enregistrement.
- nextUndoRecord
- SequenceNumber
Numéro de séquence de l’enregistrement suivant dans l’ordre spécifié par l’utilisateur.
- previousRecord
- SequenceNumber
Numéro de séquence de l’enregistrement suivant dans l’ordre précédent.
- recordAppendOptions
- RecordAppendOptions
Valeur valide de RecordAppendOptions ce qui spécifie la façon dont les données doivent être écrites.
Retours
Numéro de séquence de l’enregistrement de journal ajouté.
Implémente
Exceptions
Un ou plusieurs arguments sont null.
Un ou plusieurs arguments sont hors limites.
Impossible d’effectuer l’opération, car la séquence d’enregistrements a été ouverte avec un accès en lecture seule.
Impossible d’effectuer la requête en raison d’une exception d’E/S inattendue.
La méthode a été appelée après la suppression de la séquence.
Il n’y a pas assez de mémoire pour poursuivre l’exécution du programme.
La séquence d’enregistrements est pleine.
Exemples
L’exemple suivant crée une séquence d’enregistrements, y ajoute un enregistrement et lit enfin les enregistrements.
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();
}
}
}
Remarques
Les données contenues dans le data paramètre sont concaténées dans un tableau d’octets unique pour l’ajout en tant qu’enregistrement. Toutefois, aucune disposition n’est effectuée pour fractionner les données en segments de tableau lorsque l’enregistrement est lu.
Normalement, cette méthode se termine avant l’écriture de l’enregistrement. Pour vous assurer qu’un enregistrement a été écrit, spécifiez l’indicateur ForceFlush à l’aide du recordAppendOptions paramètre ou appelez la Flush méthode.
S’applique à
Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions)
Écrit un enregistrement de journal dans le FileRecordSequencefichier journal . Cette méthode ne peut pas être héritée.
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
Paramètres
- data
- IList<ArraySegment<Byte>>
Liste des segments de tableau d’octets qui seront concaténés et ajoutés en tant qu’enregistrement.
- nextUndoRecord
- SequenceNumber
Numéro de séquence de l’enregistrement suivant dans l’ordre spécifié par l’utilisateur.
- previousRecord
- SequenceNumber
Numéro de séquence de l’enregistrement suivant dans l’ordre précédent.
- recordAppendOptions
- RecordAppendOptions
Valeur valide de RecordAppendOptions ce qui spécifie la façon dont les données doivent être écrites.
Retours
Numéro de séquence de l’enregistrement de journal ajouté.
Implémente
Exceptions
Un ou plusieurs arguments sont null.
Un ou plusieurs arguments sont hors limites.
Impossible d’effectuer l’opération, car la séquence d’enregistrements a été ouverte avec un accès en lecture seule.
Impossible d’effectuer la requête en raison d’une exception d’E/S inattendue.
La méthode a été appelée après la suppression de la séquence.
Il n’y a pas assez de mémoire pour poursuivre l’exécution du programme.
La séquence d’enregistrements est pleine.
Exemples
L’exemple suivant montre comment créer une séquence d’enregistrements avec cette méthode.
// 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
Remarques
Les données contenues dans le data paramètre sont concaténées dans un tableau d’octets unique pour l’ajout en tant qu’enregistrement. Toutefois, aucune disposition n’est effectuée pour fractionner les données en segments de tableau lorsque l’enregistrement est lu.
Normalement, cette méthode se termine avant l’écriture de l’enregistrement. Pour vous assurer qu’un enregistrement a été écrit, spécifiez l’indicateur ForceFlush à l’aide du recordAppendOptions paramètre ou appelez la Flush méthode.
S’applique à
Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection)
Écrit un enregistrement de journal dans l’espace FileRecordSequenceprécédemment réservé dans la séquence. Cette méthode ne peut pas être héritée.
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
Paramètres
- data
- ArraySegment<Byte>
Liste des segments de tableau d’octets qui seront concaténés et ajoutés en tant qu’enregistrement.
- nextUndoRecord
- SequenceNumber
Numéro de séquence de l’enregistrement suivant dans l’ordre spécifié par l’utilisateur.
- previousRecord
- SequenceNumber
Numéro de séquence de l’enregistrement suivant dans l’ordre précédent.
- recordAppendOptions
- RecordAppendOptions
Valeur valide de RecordAppendOptions ce qui spécifie la façon dont les données doivent être écrites.
- reservations
- ReservationCollection
Qui ReservationCollection contient la réservation qui doit être utilisée pour cet enregistrement.
Retours
Numéro de séquence de l’enregistrement de journal ajouté.
Implémente
Exceptions
Un ou plusieurs arguments sont null.
Un ou plusieurs arguments sont hors limites.
reservations n’a pas été créé par cette séquence d’enregistrements.
Impossible d’effectuer l’opération, car la séquence d’enregistrements a été ouverte avec un accès en lecture seule.
Impossible d’effectuer la requête en raison d’une exception d’E/S inattendue.
La méthode a été appelée après la suppression de la séquence.
Il n’y a pas assez de mémoire pour poursuivre l’exécution du programme.
La séquence d’enregistrements est pleine.
Aucune réservation suffisamment grande pour s’adapter data peut être trouvée dans reservations.
Remarques
Les données contenues dans le data paramètre sont concaténées dans un tableau d’octets unique pour l’ajout en tant qu’enregistrement. Toutefois, aucune disposition n’est effectuée pour fractionner les données en segments de tableau lorsque l’enregistrement est lu.
L’enregistrement ajouté consomme de l’espace précédemment réservé à l’aide d’une réservation spécifiée par le reservations paramètre. Si l’ajout réussit, il consomme la plus petite zone de réservation qui peut contenir les données, et cette zone de réservation sera supprimée de la collection.
Normalement, cette méthode se termine avant l’écriture de l’enregistrement. Pour vous assurer qu’un enregistrement a été écrit, spécifiez l’indicateur ForceFlush à l’aide du recordAppendOptions paramètre ou appelez la Flush méthode.
S’applique à
Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection)
Écrit un enregistrement de journal dans l’espace FileRecordSequenceprécédemment réservé dans la séquence. Cette méthode ne peut pas être héritée.
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
Paramètres
- data
- IList<ArraySegment<Byte>>
Liste des segments de tableau d’octets qui seront concaténés et ajoutés en tant qu’enregistrement.
- nextUndoRecord
- SequenceNumber
Numéro de séquence de l’enregistrement suivant dans l’ordre spécifié par l’utilisateur.
- previousRecord
- SequenceNumber
Numéro de séquence de l’enregistrement suivant dans l’ordre précédent.
- recordAppendOptions
- RecordAppendOptions
Valeur valide de RecordAppendOptions ce qui spécifie la façon dont les données doivent être écrites.
- reservations
- ReservationCollection
Qui ReservationCollection contient la réservation qui doit être utilisée pour cet enregistrement.
Retours
Numéro de séquence de l’enregistrement de journal ajouté.
Implémente
Exceptions
Un ou plusieurs arguments sont null.
Un ou plusieurs arguments sont hors limites.
reservations n’a pas été créé par cette séquence d’enregistrements.
Impossible d’effectuer l’opération, car la séquence d’enregistrements a été ouverte avec un accès en lecture seule.
Impossible d’effectuer la requête en raison d’une exception d’E/S inattendue.
La méthode a été appelée après la suppression de la séquence.
Il n’y a pas assez de mémoire pour poursuivre l’exécution du programme.
La séquence d’enregistrements est pleine.
Aucune réservation suffisamment grande pour s’adapter data peut être trouvée dans reservations.
Remarques
Les données contenues dans le data paramètre sont concaténées dans un tableau d’octets unique pour l’ajout en tant qu’enregistrement. Toutefois, aucune disposition n’est effectuée pour fractionner les données en segments de tableau lorsque l’enregistrement est lu.
L’enregistrement ajouté consomme de l’espace précédemment réservé à l’aide d’une réservation spécifiée par le reservations paramètre. Si l’ajout réussit, il consomme la plus petite zone de réservation qui peut contenir les données, et cette zone de réservation sera supprimée de la collection.
Normalement, cette méthode se termine avant l’écriture de l’enregistrement. Pour vous assurer qu’un enregistrement a été écrit, spécifiez l’indicateur ForceFlush à l’aide du recordAppendOptions paramètre ou appelez la Flush méthode.