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