Bagikan melalui


FileRecordSequence Kelas

Definisi

IRecordSequence Mengimplementasikan di atas file. Kelas ini tidak dapat diwariskan.

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
Warisan
FileRecordSequence
Penerapan

Contoh

Contoh berikut membuat urutan rekaman, menambahkan rekaman ke dalamnya, dan akhirnya membaca rekaman.


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

Keterangan

FileRecordSequence adalah urutan rekaman berdasarkan satu file log dalam sistem file. Ini adalah implementasi sederhana dari IRecordSequence antarmuka, di atas log berbasis file sederhana.

Untuk memanipulasi log berbasis file, akun tempat aplikasi Anda berjalan harus memiliki hak istimewa yang memadai, seperti yang ditentukan oleh keamanan sistem file pada saat FileRecordSequence dibangun. Selain itu, permintaan untuk FullTrust dibuat pada waktu konstruksi. Hasil verifikasi izin di-cache setelahnya sesuai dengan model keamanan Windows. Anda harus memastikan bahwa Anda tidak secara tidak sengaja mengekspos konten urutan rekaman kepada pengguna yang tidak sah.

Konstruktor

FileRecordSequence(String)

Menginisialisasi instans FileRecordSequence baru kelas dengan file tertentu.

FileRecordSequence(String, FileAccess)

Menginisialisasi instans FileRecordSequence baru kelas dengan file tertentu dan mode akses.

FileRecordSequence(String, FileAccess, Int32)

Menginisialisasi instans FileRecordSequence baru kelas dengan file tertentu, mode akses, dan ukuran file.

Properti

BaseSequenceNumber

Mendapatkan nomor urut dari rekaman valid pertama di saat ini FileRecordSequence.

LastSequenceNumber

Mendapatkan nomor urut yang lebih besar dari catatan terakhir yang ditambahkan.

MaximumRecordLength

Mendapatkan ukuran rekaman terbesar yang dapat ditambahkan ke atau dibaca dari urutan ini, dalam byte.

ReservedBytes

Mendapatkan jumlah total byte yang telah dipesan.

RestartSequenceNumber

Mendapatkan nomor urut dari area hidupkan ulang yang terakhir ditulis.

RetryAppend

Mendapatkan atau menetapkan nilai yang menunjukkan apakah penampan dicoba kembali secara otomatis atau tidak jika log penuh.

Metode

AdvanceBaseSequenceNumber(SequenceNumber)

Memindahkan nomor urutan dasar log ke depan. Metode ini tidak dapat diwariskan.

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

Menulis catatan log ke FileRecordSequence. Metode ini tidak dapat diwariskan.

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

Menulis rekaman log ke FileRecordSequence, menggunakan ruang yang sebelumnya dipesan dalam urutan. Metode ini tidak dapat diwariskan.

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

Menulis catatan log ke FileRecordSequence. Metode ini tidak dapat diwariskan.

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

Menulis rekaman log ke FileRecordSequence, menggunakan ruang yang sebelumnya dipesan dalam urutan. Metode ini tidak dapat diwariskan.

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

Memulai operasi penamangan asinkron. Metode ini tidak dapat diwariskan.

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

Memulai operasi penautan asinkron menggunakan ruang yang sebelumnya dicadangkan dalam urutan. Metode ini tidak dapat diwariskan.

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

Memulai operasi penamangan asinkron. Metode ini tidak dapat diwariskan.

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

Memulai operasi penautan asinkron menggunakan ruang yang sebelumnya dicadangkan dalam urutan. Metode ini tidak dapat diwariskan.

BeginFlush(SequenceNumber, AsyncCallback, Object)

Memulai operasi flush asinkron, menggunakan ruang yang sebelumnya dicadangkan dalam urutan. Metode ini tidak dapat diwariskan.

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

Memulai operasi pencadangan dan penamangan asinkron. Metode ini tidak dapat diwariskan.

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

Memulai operasi pencadangan dan penamangan asinkron. Metode ini tidak dapat diwariskan.

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

Memulai operasi penulisan area hidupkan ulang asinkron, menggunakan ruang yang sebelumnya dicadangkan dalam urutan. Metode ini tidak dapat diwariskan.

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

Memulai operasi penulisan area hidupkan ulang asinkron, menggunakan ruang yang sebelumnya dicadangkan dalam urutan. Metode ini tidak dapat diwariskan.

CreateReservationCollection()

Membuat baru ReservationCollection. Metode ini tidak dapat diwariskan.

Dispose()

Segera merilis sumber daya tidak terkelola yang digunakan oleh objek.

EndAppend(IAsyncResult)

Mengakhiri operasi penamangan asinkron. Metode ini tidak dapat diwariskan.

EndFlush(IAsyncResult)

Mengakhiri operasi flush asinkron. Metode ini tidak dapat diwariskan.

EndReserveAndAppend(IAsyncResult)

Mengakhiri operasi pencadangan dan penamangan asinkron. Metode ini tidak dapat diwariskan.

EndWriteRestartArea(IAsyncResult)

Mengakhiri operasi penulisan area hidupkan ulang asinkron. Metode ini tidak dapat diwariskan.

Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
Flush()

Memastikan bahwa semua catatan yang ditambahkan telah ditulis. Metode ini tidak dapat diwariskan.

Flush(SequenceNumber)

Memastikan bahwa semua catatan yang ditambahkan telah ditulis. Metode ini tidak dapat diwariskan.

GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetType()

Mendapatkan dari instans Type saat ini.

(Diperoleh dari Object)
MemberwiseClone()

Membuat salinan dangkal dari saat ini Object.

(Diperoleh dari Object)
ReadLogRecords(SequenceNumber, LogRecordEnumeratorType)

Mengembalikan kumpulan rekaman yang dapat dijumlahkan secara berurutan. Metode ini tidak dapat diwariskan.

ReadRestartAreas()

Mengembalikan kumpulan area hidupkan ulang yang dapat dijumlahkan dalam urutan. Metode ini tidak dapat diwariskan.

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

Secara otomatis membuat satu reservasi dan menambahkan catatan ke urutan. Metode ini tidak dapat diwariskan.

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

Secara otomatis membuat satu reservasi dan menambahkan catatan ke urutan. Metode ini tidak dapat diwariskan.

ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)
WriteRestartArea(ArraySegment<Byte>)

Menulis area hidupkan ulang ke FileRecordSequence. Metode ini tidak dapat diwariskan.

WriteRestartArea(ArraySegment<Byte>, SequenceNumber)

Menulis area hidupkan ulang ke FileRecordSequence. Metode ini tidak dapat diwariskan.

WriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection)

Menulis area hidupkan ulang ke FileRecordSequence. Metode ini tidak dapat diwariskan.

WriteRestartArea(IList<ArraySegment<Byte>>)

Menulis area hidupkan ulang ke FileRecordSequence. Metode ini tidak dapat diwariskan.

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

Menulis area hidupkan ulang ke FileRecordSequence. Metode ini tidak dapat diwariskan.

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

Menulis area hidupkan ulang ke FileRecordSequence. Metode ini tidak dapat diwariskan.

Acara

TailPinned

Terjadi ketika urutan rekaman menentukan bahwa ekor harus dipindahkan ke depan. Metode ini tidak dapat diwariskan.

Berlaku untuk