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, FileAccess, Int32)

Инициализирует новый экземпляр FileRecordSequence класса с указанным файлом, режимом доступа и размером файла.

FileRecordSequence(String, FileAccess)

Инициализирует новый экземпляр FileRecordSequence класса с указанным файлом и режимом доступа.

FileRecordSequence(String)

Инициализирует новый экземпляр FileRecordSequence класса с указанным файлом.

Свойства

Имя Описание
BaseSequenceNumber

Возвращает порядковый номер первой допустимой записи в текущем FileRecordSequence.

LastSequenceNumber

Возвращает порядковый номер, который больше последней добавленной записи.

MaximumRecordLength

Получает размер самой большой записи, которую можно добавить или считывать из этой последовательности в байтах.

ReservedBytes

Возвращает общее количество байтов, зарезервированных.

RestartSequenceNumber

Возвращает порядковый номер последней записанной области перезапуска.

RetryAppend

Возвращает или задает значение, указывающее, будут ли добавления автоматически извлекаться, если журнал заполнен.

Методы

Имя Описание
AdvanceBaseSequenceNumber(SequenceNumber)

Перемещает базовый порядковый номер журнала вперед. Этот метод нельзя наследовать.

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

Записывает запись журнала в файл FileRecordSequenceс использованием пространства, ранее зарезервированного в последовательности. Этот метод нельзя наследовать.

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

Записывает запись журнала в файл FileRecordSequence. Этот метод нельзя наследовать.

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

Записывает запись журнала в файл FileRecordSequenceс использованием пространства, ранее зарезервированного в последовательности. Этот метод нельзя наследовать.

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

Записывает запись журнала в файл 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>, SequenceNumber, ReservationCollection)

Записывает область перезапуска в область FileRecordSequence. Этот метод нельзя наследовать.

WriteRestartArea(ArraySegment<Byte>, SequenceNumber)

Записывает область перезапуска в область FileRecordSequence. Этот метод нельзя наследовать.

WriteRestartArea(ArraySegment<Byte>)

Записывает область перезапуска в область FileRecordSequence. Этот метод нельзя наследовать.

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

Записывает область перезапуска в область FileRecordSequence. Этот метод нельзя наследовать.

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

Записывает область перезапуска в область FileRecordSequence. Этот метод нельзя наследовать.

WriteRestartArea(IList<ArraySegment<Byte>>)

Записывает область перезапуска в область FileRecordSequence. Этот метод нельзя наследовать.

События

Имя Описание
TailPinned

Происходит, когда последовательность записей определяет, что хвост должен быть перемещен вперед. Этот метод нельзя наследовать.

Применяется к