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 |
Происходит, когда последовательность записей определяет завершающую часть, которую необходимо переместить вперед. Этот метод не может быть унаследован. |