次の方法で共有


FileRecordSequence コンストラクター

定義

FileRecordSequence クラスの新しいインスタンスを初期化します。

オーバーロード

FileRecordSequence(String)

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

FileRecordSequence(String, FileAccess)

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

FileRecordSequence(String, FileAccess, Int32)

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

FileRecordSequence(String)

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

public:
 FileRecordSequence(System::String ^ path);
public FileRecordSequence (string path);
new System.IO.Log.FileRecordSequence : string -> System.IO.Log.FileRecordSequence
Public Sub New (path As String)

パラメーター

path
String

この FileRecordSequence インスタンスがカプセル化するファイルの相対パスまたは絶対パス。

例外

path によって指定されたファイルが有効ではありません。

path で指定したファイルが見つかりません。

予期しない I/O 例外のため、要求を実行できません。

プログラムの実行を継続する十分なメモリがありません。

指定のログ ストアへのアクセスは、オペレーティング システムにより拒否されました。

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


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 インスタンスを破棄していない限り、要求は失敗しますが、読み取りは成功します。 path が見つからない場合、サイズが 0 バイトの新しいファイルが作成されます。

適用対象

FileRecordSequence(String, FileAccess)

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

public:
 FileRecordSequence(System::String ^ path, System::IO::FileAccess access);
public FileRecordSequence (string path, System.IO.FileAccess access);
new System.IO.Log.FileRecordSequence : string * System.IO.FileAccess -> System.IO.Log.FileRecordSequence
Public Sub New (path As String, access As FileAccess)

パラメーター

path
String

この FileRecordSequence インスタンスがカプセル化するファイルの相対パスまたは絶対パス。

access
FileAccess

ユーザーがログ ファイルに対して持つアクセスの種類を制御する有効な FileAccess 値。

例外

path によって指定されたファイルが有効ではありません。

path で指定したファイルが見つかりません。

予期しない I/O 例外のため、要求を実行できません。

プログラムの実行を継続する十分なメモリがありません。

指定のログ ストアへのアクセスは、オペレーティング システムにより拒否されました。

適用対象

FileRecordSequence(String, FileAccess, Int32)

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

public:
 FileRecordSequence(System::String ^ path, System::IO::FileAccess access, int size);
public FileRecordSequence (string path, System.IO.FileAccess access, int size);
new System.IO.Log.FileRecordSequence : string * System.IO.FileAccess * int -> System.IO.Log.FileRecordSequence
Public Sub New (path As String, access As FileAccess, size As Integer)

パラメーター

path
String

この FileRecordSequence インスタンスがカプセル化するファイルの相対パスまたは絶対パス。

access
FileAccess

ユーザーがログ ファイルに対して持つアクセスの種類を制御する有効な FileAccess 値。

size
Int32

開くログ ファイルのサイズ。

例外

1 つ以上のパラメーターが有効範囲外です。

path によって指定されたファイルが有効ではありません。

path で指定したファイルが見つかりません。

予期しない I/O 例外のため、要求を実行できません。

プログラムの実行を継続する十分なメモリがありません。

指定のログ ストアへのアクセスは、オペレーティング システムにより拒否されました。

適用対象