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

要打开的日志文件的大小。

例外

一个或多个参数超出有效范围。

path 指定的文件无效。

找不到 path 指定的文件。

由于出现意外的 I/O 异常,因此无法执行该请求。

没有足够的内存来继续执行该程序。

操作系统拒绝了对指定的日志存储区的访问。

适用于