FileRecordSequence Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Implementiert eine IRecordSequence Datei oben in einer Datei. Diese Klasse kann nicht vererbt werden.
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
- Vererbung
-
FileRecordSequence
- Implementiert
Beispiele
Im folgenden Beispiel wird eine Datensatzsequenz erstellt, datensätze angefügt und schließlich die Datensätze gelesen.
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
Hinweise
Dies FileRecordSequence ist eine Datensatzsequenz, die auf einer einzelnen Protokolldatei im Dateisystem basiert. Es ist eine einfache Implementierung der IRecordSequence Schnittstelle, über einem einfachen dateibasierten Protokoll.
Um ein dateibasiertes Protokoll zu bearbeiten, muss das Konto, in dem Ihre Anwendung ausgeführt wird, über ausreichende Berechtigungen verfügen, wie von der Dateisystemsicherheit zum Zeitpunkt der FileRecordSequence Konstruktion festgelegt. Darüber hinaus wird zur Bauzeit ein Bedarf an FullTrust gestellt. Die Ergebnisse der Berechtigungsüberprüfung werden anschließend im Einklang mit dem Windows Sicherheitsmodell zwischengespeichert. Sie sollten sicherstellen, dass Sie den Inhalt der Datensatzsequenz nicht versehentlich für einen nicht autorisierten Benutzer verfügbar machen.
Konstruktoren
| Name | Beschreibung |
|---|---|
| FileRecordSequence(String, FileAccess, Int32) |
Initialisiert eine neue Instanz der FileRecordSequence Klasse mit einer angegebenen Datei, einem Zugriffsmodus und einer Dateigröße. |
| FileRecordSequence(String, FileAccess) |
Initialisiert eine neue Instanz der FileRecordSequence Klasse mit einer angegebenen Datei und einem Zugriffsmodus. |
| FileRecordSequence(String) |
Initialisiert eine neue Instanz der FileRecordSequence Klasse mit einer angegebenen Datei. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| BaseSequenceNumber |
Ruft die Sequenznummer des ersten gültigen Datensatzes im aktuellen FileRecordSequenceab. |
| LastSequenceNumber |
Ruft die Sequenznummer ab, die größer als der letzte angefügte Datensatz ist. |
| MaximumRecordLength |
Ruft die Größe des größten Datensatzes ab, der in Bytes an diese Sequenz angefügt oder gelesen werden kann. |
| ReservedBytes |
Ruft die Gesamtanzahl der Bytes ab, die reserviert wurden. |
| RestartSequenceNumber |
Ruft die Sequenznummer des zuletzt geschriebenen Neustartbereichs ab. |
| RetryAppend |
Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob Anfüge automatisch wiederholt werden, wenn das Protokoll voll ist. |
Methoden
| Name | Beschreibung |
|---|---|
| AdvanceBaseSequenceNumber(SequenceNumber) |
Verschiebt die Basissequenznummer des Protokolls vorwärts. Diese Methode kann nicht geerbt werden. |
| Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection) |
Schreibt einen Protokolldatensatz in den FileRecordSequence, wobei leer, zuvor in der Sequenz reserviert wurde. Diese Methode kann nicht geerbt werden. |
| Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions) |
Schreibt einen Protokolldatensatz in die FileRecordSequence. Diese Methode kann nicht geerbt werden. |
| Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection) |
Schreibt einen Protokolldatensatz in den FileRecordSequence, wobei leer, zuvor in der Sequenz reserviert wurde. Diese Methode kann nicht geerbt werden. |
| Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions) |
Schreibt einen Protokolldatensatz in die FileRecordSequence. Diese Methode kann nicht geerbt werden. |
| BeginAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, AsyncCallback, Object) |
Startet einen asynchronen Anfügevorgang. Diese Methode kann nicht geerbt werden. |
| BeginAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, AsyncCallback, Object) |
Beginnt einen asynchronen Anfügevorgang mit dem zuvor reservierten Speicherplatz in der Sequenz. Diese Methode kann nicht geerbt werden. |
| BeginAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, AsyncCallback, Object) |
Startet einen asynchronen Anfügevorgang. Diese Methode kann nicht geerbt werden. |
| BeginAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, AsyncCallback, Object) |
Beginnt einen asynchronen Anfügevorgang mit dem zuvor reservierten Speicherplatz in der Sequenz. Diese Methode kann nicht geerbt werden. |
| BeginFlush(SequenceNumber, AsyncCallback, Object) |
Beginnt einen asynchronen Flush-Vorgang, wobei der zuvor reservierte Speicherplatz in der Sequenz verwendet wird. Diese Methode kann nicht geerbt werden. |
| BeginReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[], AsyncCallback, Object) |
Startet einen asynchronen Reserve- und Anfügevorgang. Diese Methode kann nicht geerbt werden. |
| BeginReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[], AsyncCallback, Object) |
Startet einen asynchronen Reserve- und Anfügevorgang. Diese Methode kann nicht geerbt werden. |
| BeginWriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection, AsyncCallback, Object) |
Startet einen asynchronen Neustartbereichsschreibvorgang unter Verwendung des zuvor reservierten Speicherplatzes in der Sequenz. Diese Methode kann nicht geerbt werden. |
| BeginWriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber, ReservationCollection, AsyncCallback, Object) |
Startet einen asynchronen Neustartbereichsschreibvorgang unter Verwendung des zuvor reservierten Speicherplatzes in der Sequenz. Diese Methode kann nicht geerbt werden. |
| CreateReservationCollection() |
Erstellt ein neues ReservationCollection. Diese Methode kann nicht geerbt werden. |
| Dispose() |
Gibt sofort die nicht verwalteten Ressourcen frei, die von einem Objekt verwendet werden. |
| EndAppend(IAsyncResult) |
Beendet einen asynchronen Anfügevorgang. Diese Methode kann nicht geerbt werden. |
| EndFlush(IAsyncResult) |
Beendet einen asynchronen Leerenvorgang. Diese Methode kann nicht geerbt werden. |
| EndReserveAndAppend(IAsyncResult) |
Beendet einen asynchronen Reserve- und Anfügevorgang. Diese Methode kann nicht geerbt werden. |
| EndWriteRestartArea(IAsyncResult) |
Beendet einen asynchronen Neustartbereich-Schreibvorgang. Diese Methode kann nicht geerbt werden. |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
| Flush() |
Stellt sicher, dass alle angefügten Datensätze geschrieben wurden. Diese Methode kann nicht geerbt werden. |
| Flush(SequenceNumber) |
Stellt sicher, dass alle angefügten Datensätze geschrieben wurden. Diese Methode kann nicht geerbt werden. |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| ReadLogRecords(SequenceNumber, LogRecordEnumeratorType) |
Gibt eine aufzählbare Auflistung von Datensätzen in der Sequenz zurück. Diese Methode kann nicht geerbt werden. |
| ReadRestartAreas() |
Gibt eine aufzählbare Auflistung der Neustartbereiche in der Sequenz zurück. Diese Methode kann nicht geerbt werden. |
| ReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[]) |
Führt automatisch eine einzelne Reservierung durch und fügt einen Datensatz an die Sequenz an. Diese Methode kann nicht geerbt werden. |
| ReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[]) |
Führt automatisch eine einzelne Reservierung durch und fügt einen Datensatz an die Sequenz an. Diese Methode kann nicht geerbt werden. |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
| WriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection) |
Schreibt einen Neustartbereich in den FileRecordSequence. Diese Methode kann nicht geerbt werden. |
| WriteRestartArea(ArraySegment<Byte>, SequenceNumber) |
Schreibt einen Neustartbereich in den FileRecordSequence. Diese Methode kann nicht geerbt werden. |
| WriteRestartArea(ArraySegment<Byte>) |
Schreibt einen Neustartbereich in den FileRecordSequence. Diese Methode kann nicht geerbt werden. |
| WriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber, ReservationCollection) |
Schreibt einen Neustartbereich in den FileRecordSequence. Diese Methode kann nicht geerbt werden. |
| WriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber) |
Schreibt einen Neustartbereich in den FileRecordSequence. Diese Methode kann nicht geerbt werden. |
| WriteRestartArea(IList<ArraySegment<Byte>>) |
Schreibt einen Neustartbereich in den FileRecordSequence. Diese Methode kann nicht geerbt werden. |
Ereignisse
| Name | Beschreibung |
|---|---|
| TailPinned |
Tritt auf, wenn die Datensatzsequenz bestimmt, dass der Schwanz vorwärts verschoben werden muss. Diese Methode kann nicht geerbt werden. |