FileRecordSequence Класс

Определение

Реализует класс IRecordSequence в верхней строке файла.Implements an IRecordSequence on top of a file. Этот класс не наследуется.This class cannot be inherited.

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
Реализации

Примеры

В следующем примере создается последовательность записей, добавляется к ней запись, и наконец, выполняется чтение записей.The following example creates a record sequence, appends record to it, and finally reads the records.


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 является последовательностью записей, основанной на одном файле журнала в файловой системе.The FileRecordSequence is a record sequence based on a single log file in the file system. Это простая реализация интерфейса IRecordSequence на базе журнала, основанного на простых файлах.It is a simple implementation of the IRecordSequence interface, on top of a simple file-based log.

Для управления журналом на основе файлов учетная запись, в которой запущено приложение, должна иметь достаточные права доступа, как того требует безопасность файловой системы в момент создания объекта FileRecordSequence.To manipulate a file-based log, the account that your application is running in must have sufficient privileges, as dictated by the file system security at the time the FileRecordSequence is constructed. Кроме того, во время создания требуется разрешение FullTrust (полное доверие).In addition, a demand for FullTrust is made at construction time. Результаты проверки разрешений кэшируются в соответствии с моделью безопасности Windows.The permission verification results are cached thereafter in keeping with the Windows security model. Необходимо убедиться, что содержание последовательности записей не станет по случайности доступно неавторизованному пользователю.You should ensure that you do not accidentally expose the contents of the record sequence to an unauthorized user.

Конструкторы

FileRecordSequence(String)

Инициализирует новый экземпляр класса FileRecordSequence с указанным файлом.Initializes a new instance of the FileRecordSequence class with a specified file.

FileRecordSequence(String, FileAccess)

Инициализирует новый экземпляр класса FileRecordSequence с указанным файлом и режимом доступа.Initializes a new instance of the FileRecordSequence class with a specified file and an access mode.

FileRecordSequence(String, FileAccess, Int32)

Инициализирует новый экземпляр класса FileRecordSequence с указанным файлом, режимом доступа и размером файла.Initializes a new instance of the FileRecordSequence class with a specified file, an access mode, and a file size.

Свойства

BaseSequenceNumber

Возвращает порядковый номер первой допустимой записи в текущем объекте FileRecordSequence.Gets the sequence number of the first valid record in the current FileRecordSequence.

LastSequenceNumber

Возвращает порядковый номер, превышающий последнюю добавленную запись.Gets the sequence number which is greater than the last record appended.

MaximumRecordLength

Возвращает размер в байтах наибольшей записи, которую можно добавить или прочитать из последовательности.Gets the size of the largest record that can be appended to or read from this sequence, in bytes.

ReservedBytes

Возвращает общее число зарезервированных байтов.Gets the total number of bytes that have been reserved.

RestartSequenceNumber

Возвращает порядковый номер последней записанной области перезапуска.Gets the sequence number of the most recently written restart area.

RetryAppend

Возвращает или задает значение, указывающее, выполняется ли повторная автоматическая попытка добавления в случае заполнения журнала.Gets or sets a value indicating whether or not appends are automatically retried if the log is full.

Методы

AdvanceBaseSequenceNumber(SequenceNumber)

Выполняет переход базового порядкового номера журнала.Moves the base sequence number of the log forward. Наследовать этот метод нельзя.This method cannot be inherited.

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

Регистрирует запись журнала в FileRecordSequence.Writes a log record to the FileRecordSequence. Наследовать этот метод нельзя.This method cannot be inherited.

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

Регистрирует запись журнала в FileRecordSequence, используя пространство, которое было ранее зарезервировано в последовательности.Writes a log record to the FileRecordSequence, using space previously reserved in the sequence. Наследовать этот метод нельзя.This method cannot be inherited.

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

Регистрирует запись журнала в FileRecordSequence.Writes a log record to the FileRecordSequence. Наследовать этот метод нельзя.This method cannot be inherited.

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

Регистрирует запись журнала в FileRecordSequence, используя пространство, которое было ранее зарезервировано в последовательности.Writes a log record to the FileRecordSequence, using space previously reserved in the sequence. Наследовать этот метод нельзя.This method cannot be inherited.

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

Начинает асинхронную операцию добавления.Begins an asynchronous append operation. Наследовать этот метод нельзя.This method cannot be inherited.

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

Начинает асинхронную операцию добавления, используя пространство, которое было ранее зарезервировано в последовательности.Begins an asynchronous append operation using space previously reserved in the sequence. Наследовать этот метод нельзя.This method cannot be inherited.

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

Начинает асинхронную операцию добавления.Begins an asynchronous append operation. Наследовать этот метод нельзя.This method cannot be inherited.

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

Начинает асинхронную операцию добавления, используя пространство, которое было ранее зарезервировано в последовательности.Begins an asynchronous append operation using space previously reserved in the sequence. Наследовать этот метод нельзя.This method cannot be inherited.

BeginFlush(SequenceNumber, AsyncCallback, Object)

Начинает асинхронную операцию записи на диск, используя пространство, которое было ранее зарезервировано в последовательности.Begins an asynchronous flush operation, using space previously reserved in the sequence. Наследовать этот метод нельзя.This method cannot be inherited.

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

Начинает асинхронную операцию резервирования и добавления.Begins an asynchronous reserve and append operation. Наследовать этот метод нельзя.This method cannot be inherited.

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

Начинает асинхронную операцию резервирования и добавления.Begins an asynchronous reserve and append operation. Наследовать этот метод нельзя.This method cannot be inherited.

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

Начинает асинхронную операцию записи в область перезапуска, используя пространство, которое было ранее зарезервировано в последовательности.Begins an asynchronous restart area write operation, using space previously reserved in the sequence. Наследовать этот метод нельзя.This method cannot be inherited.

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

Начинает асинхронную операцию записи в область перезапуска, используя пространство, которое было ранее зарезервировано в последовательности.Begins an asynchronous restart area write operation, using space previously reserved in the sequence. Наследовать этот метод нельзя.This method cannot be inherited.

CreateReservationCollection()

Создает новый экземпляр ReservationCollection.Creates a new ReservationCollection. Наследовать этот метод нельзя.This method cannot be inherited.

Dispose()

Немедленно освобождает неуправляемые ресурсы, используемые объектом.Immediately releases the unmanaged resources used by an object.

EndAppend(IAsyncResult)

Завершает асинхронную операцию добавления.Ends an asynchronous append operation. Наследовать этот метод нельзя.This method cannot be inherited.

EndFlush(IAsyncResult)

Завершает асинхронную операцию записи на диск.Ends an asynchronous flush operation. Наследовать этот метод нельзя.This method cannot be inherited.

EndReserveAndAppend(IAsyncResult)

Завершает асинхронную операцию резервирования и добавления.Ends an asynchronous reserve and append operation. Наследовать этот метод нельзя.This method cannot be inherited.

EndWriteRestartArea(IAsyncResult)

Завершает операцию записи в область перезапуска.Ends an asynchronous restart area write operation. Наследовать этот метод нельзя.This method cannot be inherited.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Унаследовано от Object)
Flush()

Обеспечивает запись всех добавленных записей.Ensures that all appended records have been written. Наследовать этот метод нельзя.This method cannot be inherited.

Flush(SequenceNumber)

Обеспечивает запись всех добавленных записей.Ensures that all appended records have been written. Наследовать этот метод нельзя.This method cannot be inherited.

GetHashCode()

Служит в качестве хэш-функции по умолчанию.Serves as the default hash function.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)
ReadLogRecords(SequenceNumber, LogRecordEnumeratorType)

Возвращает перечислимую коллекцию записей в последовательности.Returns an enumerable collection of records in the sequence. Наследовать этот метод нельзя.This method cannot be inherited.

ReadRestartAreas()

Возвращает перечисляемую коллекцию областей перезапуска в последовательности.Returns an enumerable collection of the restart areas in the sequence. Наследовать этот метод нельзя.This method cannot be inherited.

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

Автоматически делает одно резервирование и добавляет запись в последовательность.Automatically makes a single reservation and appends a record to the sequence. Наследовать этот метод нельзя.This method cannot be inherited.

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

Автоматически делает одно резервирование и добавляет запись в последовательность.Automatically makes a single reservation and appends a record to the sequence. Наследовать этот метод нельзя.This method cannot be inherited.

ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Унаследовано от Object)
WriteRestartArea(ArraySegment<Byte>)

Записывает область перезапуска в объект FileRecordSequence.Writes a restart area to the FileRecordSequence. Наследовать этот метод нельзя.This method cannot be inherited.

WriteRestartArea(ArraySegment<Byte>, SequenceNumber)

Записывает область перезапуска в объект FileRecordSequence.Writes a restart area to the FileRecordSequence. Наследовать этот метод нельзя.This method cannot be inherited.

WriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection)

Записывает область перезапуска в объект FileRecordSequence.Writes a restart area to the FileRecordSequence. Наследовать этот метод нельзя.This method cannot be inherited.

WriteRestartArea(IList<ArraySegment<Byte>>)

Записывает область перезапуска в объект FileRecordSequence.Writes a restart area to the FileRecordSequence. Наследовать этот метод нельзя.This method cannot be inherited.

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

Записывает область перезапуска в объект FileRecordSequence.Writes a restart area to the FileRecordSequence. Наследовать этот метод нельзя.This method cannot be inherited.

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

Записывает область перезапуска в объект FileRecordSequence.Writes a restart area to the FileRecordSequence. Наследовать этот метод нельзя.This method cannot be inherited.

События

TailPinned

Происходит, когда последовательность записей определяет завершающую часть, которую необходимо переместить вперед.Occurs when the record sequence determines that the tail must be moved forward. Наследовать этот метод нельзя.This method cannot be inherited.

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