FileRecordSequence.Append Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
öğesine bir günlük kaydı FileRecordSequenceyazar.
Aşırı Yüklemeler
Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions) |
öğesine bir günlük kaydı FileRecordSequenceyazar. Bu yöntem devralınamaz. |
Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions) |
öğesine bir günlük kaydı FileRecordSequenceyazar. Bu yöntem devralınamaz. |
Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection) |
Dizininde daha önce ayrılmış olan alanı kullanarak öğesine bir günlük kaydı FileRecordSequenceyazar. Bu yöntem devralınamaz. |
Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection) |
Dizininde daha önce ayrılmış olan alanı kullanarak öğesine bir günlük kaydı FileRecordSequenceyazar. Bu yöntem devralınamaz. |
Örnekler
Aşağıdaki örnek bir kayıt dizisi oluşturur, buna kayıt ekler ve son olarak kayıtları okur.
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)
öğesine bir günlük kaydı FileRecordSequenceyazar. Bu yöntem devralınamaz.
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
Parametreler
- data
- ArraySegment<Byte>
Birleştirilmiş ve kayıt olarak eklenecek bayt dizisi kesimlerinin listesi.
- nextUndoRecord
- SequenceNumber
Kullanıcı tarafından belirtilen sırada bir sonraki kaydın sıra numarası.
- previousRecord
- SequenceNumber
Önceki sırada bir sonraki kaydın sıra numarası.
- recordAppendOptions
- RecordAppendOptions
Verilerin nasıl yazılması gerektiğini belirten geçerli değeri RecordAppendOptions .
Döndürülenler
Eklenen günlük kaydının sıra numarası.
Uygulamalar
Özel durumlar
Bağımsız değişkenlerden biri veya daha fazlası şeklindedir null
.
Bir veya daha fazla bağımsız değişken aralık dışında.
Kayıt dizisi salt okunur erişimle açıldığından işlem gerçekleştirilemiyor.
İstek beklenmeyen bir G/Ç özel durumu nedeniyle gerçekleştirilemedi.
yöntemi, dizisi atıldıktan sonra çağrılır.
Programın yürütülmesine devam etmek için yeterli bellek yok.
Kayıt dizisi dolu.
Örnekler
Aşağıdaki örnek bir kayıt dizisi oluşturur, buna kayıt ekler ve son olarak kayıtları okur.
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();
}
}
}
Açıklamalar
parametresinde data
bulunan veriler, kayıt olarak eklemek için tek bir bayt dizisine birleştirilir. Ancak, kayıt okunduğunda verileri dizi kesimlerine bölmek için herhangi bir sağlama yapılmaz.
Normalde, bu yöntem kayıt yazılmadan önce tamamlar. Bir kaydın yazılmasını sağlamak için parametresini ForceFlush kullanarak recordAppendOptions
bayrağını belirtin veya yöntemini çağırın Flush .
Şunlara uygulanır
Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions)
öğesine bir günlük kaydı FileRecordSequenceyazar. Bu yöntem devralınamaz.
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
Parametreler
- data
- IList<ArraySegment<Byte>>
Birleştirilmiş ve kayıt olarak eklenecek bayt dizisi kesimlerinin listesi.
- nextUndoRecord
- SequenceNumber
Kullanıcı tarafından belirtilen sırada bir sonraki kaydın sıra numarası.
- previousRecord
- SequenceNumber
Önceki sırada bir sonraki kaydın sıra numarası.
- recordAppendOptions
- RecordAppendOptions
Verilerin nasıl yazılması gerektiğini belirten geçerli değeri RecordAppendOptions .
Döndürülenler
Eklenen günlük kaydının sıra numarası.
Uygulamalar
Özel durumlar
Bağımsız değişkenlerden biri veya daha fazlası şeklindedir null
.
Bir veya daha fazla bağımsız değişken aralık dışında.
Kayıt dizisi salt okunur erişimle açıldığından işlem gerçekleştirilemiyor.
İstek beklenmeyen bir G/Ç özel durumu nedeniyle gerçekleştirilemedi.
yöntemi, dizisi atıldıktan sonra çağrılır.
Programın yürütülmesine devam etmek için yeterli bellek yok.
Kayıt dizisi dolu.
Örnekler
Aşağıdaki örnek, bu yöntemle nasıl kayıt dizisi oluşturabileceğinizi gösterir.
// 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
Açıklamalar
parametresinde data
bulunan veriler, kayıt olarak eklemek için tek bir bayt dizisine birleştirilir. Ancak, kayıt okunduğunda verileri dizi kesimlerine bölmek için herhangi bir sağlama yapılmaz.
Normalde, bu yöntem kayıt yazılmadan önce tamamlar. Bir kaydın yazılmasını sağlamak için parametresini ForceFlush kullanarak recordAppendOptions
bayrağını belirtin veya yöntemini çağırın Flush .
Şunlara uygulanır
Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection)
Dizininde daha önce ayrılmış olan alanı kullanarak öğesine bir günlük kaydı FileRecordSequenceyazar. Bu yöntem devralınamaz.
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
Parametreler
- data
- ArraySegment<Byte>
Birleştirilmiş ve kayıt olarak eklenecek bayt dizisi kesimlerinin listesi.
- nextUndoRecord
- SequenceNumber
Kullanıcı tarafından belirtilen sırada bir sonraki kaydın sıra numarası.
- previousRecord
- SequenceNumber
Önceki sırada bir sonraki kaydın sıra numarası.
- recordAppendOptions
- RecordAppendOptions
Verilerin nasıl yazılması gerektiğini belirten geçerli değeri RecordAppendOptions .
- reservations
- ReservationCollection
ReservationCollection Bu kayıt için kullanılması gereken rezervasyonu içeren.
Döndürülenler
Eklenen günlük kaydının sıra numarası.
Uygulamalar
Özel durumlar
Bağımsız değişkenlerden biri veya daha fazlası şeklindedir null
.
Bir veya daha fazla bağımsız değişken aralık dışında.
reservations
bu kayıt dizisi tarafından oluşturulmadı.
Kayıt dizisi salt okunur erişimle açıldığından işlem gerçekleştirilemiyor.
İstek beklenmeyen bir G/Ç özel durumu nedeniyle gerçekleştirilemedi.
yöntemi, dizisi atıldıktan sonra çağrılır.
Programın yürütülmesine devam etmek için yeterli bellek yok.
Kayıt dizisi dolu.
içinde sığacak data
kadar büyük rezervasyon bulunamaz reservations
.
Açıklamalar
parametresinde data
bulunan veriler, kayıt olarak eklemek için tek bir bayt dizisine birleştirilir. Ancak, kayıt okunduğunda verileri dizi kesimlerine bölmek için herhangi bir sağlama yapılmaz.
Eklenen kayıt, parametresi tarafından reservations
belirtilen ayırmayı kullanarak daha önce ayrılmış olan alanı kullanır. Ekleme başarılı olursa, verileri tutabilecek en küçük rezervasyon alanını kullanır ve bu rezervasyon alanı koleksiyondan kaldırılır.
Normalde, bu yöntem kayıt yazılmadan önce tamamlar. Bir kaydın yazılmasını sağlamak için parametresini ForceFlush kullanarak recordAppendOptions
bayrağını belirtin veya yöntemini çağırın Flush .
Şunlara uygulanır
Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection)
Dizininde daha önce ayrılmış olan alanı kullanarak öğesine bir günlük kaydı FileRecordSequenceyazar. Bu yöntem devralınamaz.
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
Parametreler
- data
- IList<ArraySegment<Byte>>
Birleştirilmiş ve kayıt olarak eklenecek bayt dizisi kesimlerinin listesi.
- nextUndoRecord
- SequenceNumber
Kullanıcı tarafından belirtilen sırada bir sonraki kaydın sıra numarası.
- previousRecord
- SequenceNumber
Önceki sırada bir sonraki kaydın sıra numarası.
- recordAppendOptions
- RecordAppendOptions
Verilerin nasıl yazılması gerektiğini belirten geçerli değeri RecordAppendOptions .
- reservations
- ReservationCollection
ReservationCollection Bu kayıt için kullanılması gereken rezervasyonu içeren.
Döndürülenler
Eklenen günlük kaydının sıra numarası.
Uygulamalar
Özel durumlar
Bağımsız değişkenlerden biri veya daha fazlası şeklindedir null
.
Bir veya daha fazla bağımsız değişken aralık dışında.
reservations
bu kayıt dizisi tarafından oluşturulmadı.
Kayıt dizisi salt okunur erişimle açıldığından işlem gerçekleştirilemiyor.
İstek beklenmeyen bir G/Ç özel durumu nedeniyle gerçekleştirilemedi.
yöntemi, dizisi atıldıktan sonra çağrılır.
Programın yürütülmesine devam etmek için yeterli bellek yok.
Kayıt dizisi dolu.
içinde sığacak data
kadar büyük rezervasyon bulunamaz reservations
.
Açıklamalar
parametresinde data
bulunan veriler, kayıt olarak eklemek için tek bir bayt dizisine birleştirilir. Ancak, kayıt okunduğunda verileri dizi kesimlerine bölmek için herhangi bir sağlama yapılmaz.
Eklenen kayıt, parametresi tarafından reservations
belirtilen ayırmayı kullanarak daha önce ayrılmış olan alanı kullanır. Ekleme başarılı olursa, verileri tutabilecek en küçük rezervasyon alanını kullanır ve bu rezervasyon alanı koleksiyondan kaldırılır.
Normalde, bu yöntem kayıt yazılmadan önce tamamlar. Bir kaydın yazılmasını sağlamak için parametresini ForceFlush kullanarak recordAppendOptions
bayrağını belirtin veya yöntemini çağırın Flush .