FileRecordSequence.Append Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Escribe un registro de registro en .FileRecordSequence
Sobrecargas
| Nombre | Description |
|---|---|
| Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions) |
Escribe un registro de registro en .FileRecordSequence Este método no se puede heredar. |
| Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions) |
Escribe un registro de registro en .FileRecordSequence Este método no se puede heredar. |
| Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection) |
Escribe un registro de registro en , FileRecordSequenceutilizando el espacio reservado previamente en la secuencia. Este método no se puede heredar. |
| Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection) |
Escribe un registro de registro en , FileRecordSequenceutilizando el espacio reservado previamente en la secuencia. Este método no se puede heredar. |
Ejemplos
En el ejemplo siguiente se crea una secuencia de registros, se anexa el registro y, por último, se leen los registros.
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)
Escribe un registro de registro en .FileRecordSequence Este método no se puede heredar.
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
Parámetros
- data
- ArraySegment<Byte>
Lista de segmentos de matriz de bytes que se concatenarán y anexarán como registro.
- nextUndoRecord
- SequenceNumber
Número de secuencia del siguiente registro en el orden especificado por el usuario.
- previousRecord
- SequenceNumber
Número de secuencia del siguiente registro en orden anterior.
- recordAppendOptions
- RecordAppendOptions
Valor válido de RecordAppendOptions que especifica cómo se deben escribir los datos.
Devoluciones
Número de secuencia del registro anexado.
Implementaciones
Excepciones
Uno o varios de los argumentos son null.
Uno o varios de los argumentos están fuera del intervalo.
No se puede realizar la operación porque la secuencia de registros se abrió con acceso de solo lectura.
No se pudo realizar la solicitud debido a una excepción de E/S inesperada.
Se llamó al método después de eliminar la secuencia.
No hay memoria suficiente para continuar con la ejecución del programa.
La secuencia de registros está llena.
Ejemplos
En el ejemplo siguiente se crea una secuencia de registros, se anexa el registro y, por último, se leen los registros.
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();
}
}
}
Comentarios
Los datos contenidos en el data parámetro se concatenan en una sola matriz de bytes para anexarse como registro. Sin embargo, no se realiza ninguna disposición para dividir los datos en segmentos de matriz cuando se lee el registro.
Normalmente, este método se completa antes de que se haya escrito el registro. Para asegurarse de que se ha escrito un registro, especifique la ForceFlush marca mediante el recordAppendOptions parámetro o llame al Flush método .
Se aplica a
Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions)
Escribe un registro de registro en .FileRecordSequence Este método no se puede heredar.
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
Parámetros
- data
- IList<ArraySegment<Byte>>
Lista de segmentos de matriz de bytes que se concatenarán y anexarán como registro.
- nextUndoRecord
- SequenceNumber
Número de secuencia del siguiente registro en el orden especificado por el usuario.
- previousRecord
- SequenceNumber
Número de secuencia del siguiente registro en orden anterior.
- recordAppendOptions
- RecordAppendOptions
Valor válido de RecordAppendOptions que especifica cómo se deben escribir los datos.
Devoluciones
Número de secuencia del registro anexado.
Implementaciones
Excepciones
Uno o varios de los argumentos son null.
Uno o varios de los argumentos están fuera del intervalo.
No se puede realizar la operación porque la secuencia de registros se abrió con acceso de solo lectura.
No se pudo realizar la solicitud debido a una excepción de E/S inesperada.
Se llamó al método después de eliminar la secuencia.
No hay memoria suficiente para continuar con la ejecución del programa.
La secuencia de registros está llena.
Ejemplos
En el ejemplo siguiente se muestra cómo puede crear una secuencia de registros con este método.
// 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
Comentarios
Los datos contenidos en el data parámetro se concatenan en una sola matriz de bytes para anexarse como registro. Sin embargo, no se realiza ninguna disposición para dividir los datos en segmentos de matriz cuando se lee el registro.
Normalmente, este método se completa antes de que se haya escrito el registro. Para asegurarse de que se ha escrito un registro, especifique la ForceFlush marca mediante el recordAppendOptions parámetro o llame al Flush método .
Se aplica a
Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection)
Escribe un registro de registro en , FileRecordSequenceutilizando el espacio reservado previamente en la secuencia. Este método no se puede heredar.
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
Parámetros
- data
- ArraySegment<Byte>
Lista de segmentos de matriz de bytes que se concatenarán y anexarán como registro.
- nextUndoRecord
- SequenceNumber
Número de secuencia del siguiente registro en el orden especificado por el usuario.
- previousRecord
- SequenceNumber
Número de secuencia del siguiente registro en orden anterior.
- recordAppendOptions
- RecordAppendOptions
Valor válido de RecordAppendOptions que especifica cómo se deben escribir los datos.
- reservations
- ReservationCollection
que ReservationCollection contiene la reserva que se debe usar para este registro.
Devoluciones
Número de secuencia del registro anexado.
Implementaciones
Excepciones
Uno o varios de los argumentos son null.
Uno o varios de los argumentos están fuera del intervalo.
reservations esta secuencia de registros no la creó.
No se puede realizar la operación porque la secuencia de registros se abrió con acceso de solo lectura.
No se pudo realizar la solicitud debido a una excepción de E/S inesperada.
Se llamó al método después de eliminar la secuencia.
No hay memoria suficiente para continuar con la ejecución del programa.
La secuencia de registros está llena.
No se puede encontrar ninguna reserva lo suficientemente grande como para caber data en reservations.
Comentarios
Los datos contenidos en el data parámetro se concatenan en una sola matriz de bytes para anexarse como registro. Sin embargo, no se realiza ninguna disposición para dividir los datos en segmentos de matriz cuando se lee el registro.
El registro anexado consumirá espacio que se ha reservado previamente mediante una reserva especificada por el reservations parámetro . Si la anexión se realiza correctamente, consumirá el área de reserva más pequeña que puede contener los datos y ese área de reserva se quitará de la colección.
Normalmente, este método se completa antes de que se haya escrito el registro. Para asegurarse de que se ha escrito un registro, especifique la ForceFlush marca mediante el recordAppendOptions parámetro o llame al Flush método .
Se aplica a
Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection)
Escribe un registro de registro en , FileRecordSequenceutilizando el espacio reservado previamente en la secuencia. Este método no se puede heredar.
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
Parámetros
- data
- IList<ArraySegment<Byte>>
Lista de segmentos de matriz de bytes que se concatenarán y anexarán como registro.
- nextUndoRecord
- SequenceNumber
Número de secuencia del siguiente registro en el orden especificado por el usuario.
- previousRecord
- SequenceNumber
Número de secuencia del siguiente registro en orden anterior.
- recordAppendOptions
- RecordAppendOptions
Valor válido de RecordAppendOptions que especifica cómo se deben escribir los datos.
- reservations
- ReservationCollection
que ReservationCollection contiene la reserva que se debe usar para este registro.
Devoluciones
Número de secuencia del registro anexado.
Implementaciones
Excepciones
Uno o varios de los argumentos son null.
Uno o varios de los argumentos están fuera del intervalo.
reservations esta secuencia de registros no la creó.
No se puede realizar la operación porque la secuencia de registros se abrió con acceso de solo lectura.
No se pudo realizar la solicitud debido a una excepción de E/S inesperada.
Se llamó al método después de eliminar la secuencia.
No hay memoria suficiente para continuar con la ejecución del programa.
La secuencia de registros está llena.
No se puede encontrar ninguna reserva lo suficientemente grande como para caber data en reservations.
Comentarios
Los datos contenidos en el data parámetro se concatenan en una sola matriz de bytes para anexarse como registro. Sin embargo, no se realiza ninguna disposición para dividir los datos en segmentos de matriz cuando se lee el registro.
El registro anexado consumirá espacio que se ha reservado previamente mediante una reserva especificada por el reservations parámetro . Si la anexión se realiza correctamente, consumirá el área de reserva más pequeña que puede contener los datos y ese área de reserva se quitará de la colección.
Normalmente, este método se completa antes de que se haya escrito el registro. Para asegurarse de que se ha escrito un registro, especifique la ForceFlush marca mediante el recordAppendOptions parámetro o llame al Flush método .