FileRecordSequence クラス

定義

ファイル上に IRecordSequence を実装します。 このクラスは継承できません。

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
継承
FileRecordSequence
実装

次の例では、レコード シーケンスを作成し、レコードを追加し、最後にレコードを読み取ります。


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

注釈

FileRecordSequence は、ファイル システム内の単一のログ ファイルに基づくレコード シーケンスです。 これは、単純なファイルに基づくログ上の IRecordSequence インターフェイスの簡単な実装です。

ファイル ベースのログを操作するには、アプリケーションを実行しているアカウントに十分な特権が必要です。特権は、FileRecordSequence の構築時にファイル システムのセキュリティで指定されます。 さらに、構築時に FullTrust への要求が行われます。 アクセス許可の検査の結果は、事後に Windows セキュリティ モデルに合わせてキャッシュされます。 レコード シーケンスのコンテンツを権限のないユーザーに誤って開示しないことを確認することをお勧めします。

コンストラクター

FileRecordSequence(String)

指定したファイルを使用して、FileRecordSequence クラスの新しいインスタンスを初期化します。

FileRecordSequence(String, FileAccess)

ファイルおよびアクセス モードを指定して、FileRecordSequence クラスの新しいインスタンスを初期化します。

FileRecordSequence(String, FileAccess, Int32)

ファイル、アクセス モード、およびファイル サイズを指定して、FileRecordSequence クラスの新しいインスタンスを初期化します。

プロパティ

BaseSequenceNumber

現在の FileRecordSequence 内の最初の有効なレコードのシーケンス番号を取得します。

LastSequenceNumber

追加された最後のレコードのシーケンス番号より大きいシーケンス番号を取得します。

MaximumRecordLength

このシーケンスに対して追加または読み取りが可能な最大レコード サイズのバイト数を取得します。

ReservedBytes

予約された合計バイト数を取得します。

RestartSequenceNumber

直前に書き込まれた再開領域のシーケンス番号を取得します。

RetryAppend

ログがいっぱいの場合に、追加を自動的に再試行するかどうかを示す値を取得または設定します。

メソッド

AdvanceBaseSequenceNumber(SequenceNumber)

ログの基本シーケンス番号を前方移動します。 このメソッドは継承できません。

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

ログ レコードを FileRecordSequence に書き込みます。 このメソッドは継承できません。

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

以前にシーケンスに予約された領域を使用して、FileRecordSequence にログ レコードを書き込みます。 このメソッドは継承できません。

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

ログ レコードを FileRecordSequence に書き込みます。 このメソッドは継承できません。

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

以前にシーケンスに予約された領域を使用して、FileRecordSequence にログ レコードを書き込みます。 このメソッドは継承できません。

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

非同期の追加操作を開始します。 このメソッドは継承できません。

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

以前にシーケンス内で予約された領域を使用して、非同期の追加操作を開始します。 このメソッドは継承できません。

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

非同期の追加操作を開始します。 このメソッドは継承できません。

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

以前にシーケンス内で予約された領域を使用して、非同期の追加操作を開始します。 このメソッドは継承できません。

BeginFlush(SequenceNumber, AsyncCallback, Object)

以前にシーケンス内で予約された領域を使用して、非同期のフラッシュ操作を開始します。 このメソッドは継承できません。

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

非同期の予約および追加操作を開始します。 このメソッドは継承できません。

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

非同期の予約および追加操作を開始します。 このメソッドは継承できません。

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

以前にシーケンス内で予約された領域を使用して、非同期の再開領域の書き込み操作を開始します。 このメソッドは継承できません。

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

以前にシーケンス内で予約された領域を使用して、非同期の再開領域の書き込み操作を開始します。 このメソッドは継承できません。

CreateReservationCollection()

新しい ReservationCollection を作成します。 このメソッドは継承できません。

Dispose()

オブジェクトで使用されているアンマネージ リソースを直ちに解放します。

EndAppend(IAsyncResult)

非同期の追加操作を終了します。 このメソッドは継承できません。

EndFlush(IAsyncResult)

非同期フラッシュ操作を終了します。 このメソッドは継承できません。

EndReserveAndAppend(IAsyncResult)

非同期の予約および追加操作を終了します。 このメソッドは継承できません。

EndWriteRestartArea(IAsyncResult)

非同期の再開領域の書き込み操作を終了します。 このメソッドは継承できません。

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
Flush()

追加したすべてのレコードが書き込まれたことを確認します。 このメソッドは継承できません。

Flush(SequenceNumber)

追加したすべてのレコードが書き込まれたことを確認します。 このメソッドは継承できません。

GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
ReadLogRecords(SequenceNumber, LogRecordEnumeratorType)

シーケンス内のレコードの列挙可能なコレクションを返します。 このメソッドは継承できません。

ReadRestartAreas()

シーケンス内の再開領域の列挙可能なコレクションを返します。 このメソッドは継承できません。

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

単一の予約を自動的に行って、シーケンスにレコードを追加します。 このメソッドは継承できません。

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

単一の予約を自動的に行って、シーケンスにレコードを追加します。 このメソッドは継承できません。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)
WriteRestartArea(ArraySegment<Byte>)

再開領域を FileRecordSequence に書き込みます。 このメソッドは継承できません。

WriteRestartArea(ArraySegment<Byte>, SequenceNumber)

再開領域を FileRecordSequence に書き込みます。 このメソッドは継承できません。

WriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection)

再開領域を FileRecordSequence に書き込みます。 このメソッドは継承できません。

WriteRestartArea(IList<ArraySegment<Byte>>)

再開領域を FileRecordSequence に書き込みます。 このメソッドは継承できません。

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

再開領域を FileRecordSequence に書き込みます。 このメソッドは継承できません。

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

再開領域を FileRecordSequence に書き込みます。 このメソッドは継承できません。

イベント

TailPinned

レコード シーケンスで末尾を前方に移動する必要があると判断された場合に発生します。 このメソッドは継承できません。

適用対象