Aracılığıyla paylaş


FileRecordSequence Sınıf

Tanım

Dosyanın üzerine bir IRecordSequence uygular. Bu sınıf devralınamaz.

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
Devralma
FileRecordSequence
Uygulamalar

Örnekler

Aşağıdaki örnek bir kayıt dizisi oluşturur, buna kayıt ekler ve son olarak kayıtları okur.


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

Açıklamalar

FileRecordSequence, dosya sistemindeki tek bir günlük dosyasını temel alan bir kayıt dizisidir. Basit bir dosya tabanlı günlüğün IRecordSequence üzerine arabirimin basit bir uygulamasıdır.

Dosya tabanlı bir günlüğü işlemek için, uygulamanızın içinde çalıştığı hesabın, oluşturulurken dosya sistemi güvenliği FileRecordSequence tarafından dikte edilen yeterli ayrıcalıklara sahip olması gerekir. Buna ek olarak, fulltrust için bir talep inşaat zamanında yapılır. İzin doğrulama sonuçları bundan sonra Windows güvenlik modeliyle birlikte önbelleğe alınır. Kayıt dizisinin içeriğini yanlışlıkla yetkisiz bir kullanıcıya göstermediğinizden emin olmalısınız.

Oluşturucular

FileRecordSequence(String)

Belirtilen dosyayla sınıfının yeni bir örneğini FileRecordSequence başlatır.

FileRecordSequence(String, FileAccess)

Belirtilen bir dosya ve erişim modu ile sınıfının yeni bir örneğini FileRecordSequence başlatır.

FileRecordSequence(String, FileAccess, Int32)

Sınıfın FileRecordSequence yeni bir örneğini belirtilen dosya, erişim modu ve dosya boyutuyla başlatır.

Özellikler

BaseSequenceNumber

Geçerli FileRecordSequenceiçindeki ilk geçerli kaydın sıra numarasını alır.

LastSequenceNumber

Eklenen son kayıttan büyük olan sıra numarasını alır.

MaximumRecordLength

Bu diziye eklenebilen veya bu diziden okunabilen en büyük kaydın boyutunu bayt cinsinden alır.

ReservedBytes

Ayrılmış toplam bayt sayısını alır.

RestartSequenceNumber

En son yazılan yeniden başlatma alanının sıra numarasını alır.

RetryAppend

Günlük doluysa eklemelerin otomatik olarak yeniden denenip denenmeyeceğini belirten bir değer alır veya ayarlar.

Yöntemler

AdvanceBaseSequenceNumber(SequenceNumber)

Günlüğün temel sıra numarasını ileri taşır. Bu yöntem devralınamaz.

Append(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)

öğ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.

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

Zaman uyumsuz bir ekleme işlemi başlatır. Bu yöntem devralınamaz.

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

Daha önce dizide ayrılmış olan alanı kullanarak zaman uyumsuz bir ekleme işlemi başlatır. Bu yöntem devralınamaz.

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

Zaman uyumsuz bir ekleme işlemi başlatır. Bu yöntem devralınamaz.

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

Daha önce dizide ayrılmış olan alanı kullanarak zaman uyumsuz bir ekleme işlemi başlatır. Bu yöntem devralınamaz.

BeginFlush(SequenceNumber, AsyncCallback, Object)

Daha önce dizide ayrılmış olan alanı kullanarak zaman uyumsuz temizleme işlemini başlatır. Bu yöntem devralınamaz.

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

Zaman uyumsuz bir ayırma ve ekleme işlemi başlatır. Bu yöntem devralınamaz.

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

Zaman uyumsuz bir ayırma ve ekleme işlemi başlatır. Bu yöntem devralınamaz.

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

Daha önce dizide ayrılmış olan alanı kullanarak zaman uyumsuz bir yeniden başlatma alanı yazma işlemi başlatır. Bu yöntem devralınamaz.

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

Daha önce dizide ayrılmış olan alanı kullanarak zaman uyumsuz bir yeniden başlatma alanı yazma işlemi başlatır. Bu yöntem devralınamaz.

CreateReservationCollection()

Yeni bir ReservationCollection oluşturur. Bu yöntem devralınamaz.

Dispose()

Bir nesne tarafından kullanılan yönetilmeyen kaynakları hemen serbest bırakır.

EndAppend(IAsyncResult)

Zaman uyumsuz ekleme işlemini sonlandırır. Bu yöntem devralınamaz.

EndFlush(IAsyncResult)

Zaman uyumsuz temizleme işlemini sonlandırır. Bu yöntem devralınamaz.

EndReserveAndAppend(IAsyncResult)

Zaman uyumsuz bir ayırma ve ekleme işlemini sonlandırır. Bu yöntem devralınamaz.

EndWriteRestartArea(IAsyncResult)

Zaman uyumsuz bir yeniden başlatma alanı yazma işlemini sonlandırır. Bu yöntem devralınamaz.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
Flush()

Eklenen tüm kayıtların yazılmasını sağlar. Bu yöntem devralınamaz.

Flush(SequenceNumber)

Eklenen tüm kayıtların yazılmasını sağlar. Bu yöntem devralınamaz.

GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ReadLogRecords(SequenceNumber, LogRecordEnumeratorType)

Dizideki listelenebilir bir kayıt koleksiyonu döndürür. Bu yöntem devralınamaz.

ReadRestartAreas()

Dizideki yeniden başlatma alanlarının numaralandırılabilir bir koleksiyonunu döndürür. Bu yöntem devralınamaz.

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

Otomatik olarak tek bir rezervasyon yapar ve bir kaydı diziye ekler. Bu yöntem devralınamaz.

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

Otomatik olarak tek bir rezervasyon yapar ve bir kaydı diziye ekler. Bu yöntem devralınamaz.

ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)
WriteRestartArea(ArraySegment<Byte>)

öğesine yeniden başlatma alanı FileRecordSequenceyazar. Bu yöntem devralınamaz.

WriteRestartArea(ArraySegment<Byte>, SequenceNumber)

öğesine yeniden başlatma alanı FileRecordSequenceyazar. Bu yöntem devralınamaz.

WriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection)

öğesine yeniden başlatma alanı FileRecordSequenceyazar. Bu yöntem devralınamaz.

WriteRestartArea(IList<ArraySegment<Byte>>)

öğesine yeniden başlatma alanı FileRecordSequenceyazar. Bu yöntem devralınamaz.

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

öğesine yeniden başlatma alanı FileRecordSequenceyazar. Bu yöntem devralınamaz.

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

öğesine yeniden başlatma alanı FileRecordSequenceyazar. Bu yöntem devralınamaz.

Ekinlikler

TailPinned

Kayıt dizisi kuyruğun ileriye taşınması gerektiğini belirlediğinde gerçekleşir. Bu yöntem devralınamaz.

Şunlara uygulanır