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 zusätzlich zu 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 werden angefügt, und schließlich werden 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
Die FileRecordSequence ist eine auf einer einzelnen Protokolldatei im Dateisystem basierende Datensatzsequenz. Hierbei handelt es sich um eine einfache Implementierung der IRecordSequence-Schnittstelle zusätzlich zum einfachen dateibasierten Protokoll.
Für die Bearbeitung eines dateibasierten Protokolls muss das Konto, in dem Ihre Anwendung läuft, über ausreichende Berechtigungen verfügen, die durch die Dateisystemsicherheit zum Zeitpunkt der Erstellung der FileRecordSequence festgelegt werden. Darüber hinaus wird während der Erstellung eine Anforderung von FullTrust ausgegeben. Die Ergebnisse der Berechtigungsüberprüfung werden anschließend gemäß dem Windows-Sicherheitsmodell zwischengespeichert. Sie müssen sicherstellen, dass der Inhalt der Datensatzsequenz nicht versehentlich für einen unberechtigten Benutzer verfügbar wird.
Konstruktoren
FileRecordSequence(String) |
Initialisiert eine neue Instanz der FileRecordSequence-Klasse mit einer angegebenen Datei. |
FileRecordSequence(String, FileAccess) |
Initialisiert eine neue Instanz der FileRecordSequence-Klasse mit der Angabe einer Datei und eines Zugriffsmodus. |
FileRecordSequence(String, FileAccess, Int32) |
Initialisiert eine neue Instanz der FileRecordSequence-Klasse mit der Angabe einer Datei, eines Zugriffsmodus und einer Dateigröße. |
Eigenschaften
BaseSequenceNumber |
Ruft die Sequenznummer des ersten gültigen Datensatzes in der FileRecordSequence ab. |
LastSequenceNumber |
Ruft die Sequenznummer ab, die größer ist als der letzte angefügte Datensatz. |
MaximumRecordLength |
Ruft die Größe des größten Datensatzes in Byte ab, der der Sequenz angefügt oder aus der Sequenz gelesen werden kann. |
ReservedBytes |
Ruft die Gesamtanzahl von Byte ab, die reserviert wurden. |
RestartSequenceNumber |
Ruft die Sequenznummer des zuletzt geschriebenen Neustartbereichs ab. |
RetryAppend |
Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob Anfügevorgänge automatisch wiederholt werden, wenn das Protokoll voll ist. |
Methoden
AdvanceBaseSequenceNumber(SequenceNumber) |
Rückt die Basissequenznummer des Protokolls vor. Diese Methode kann nicht vererbt werden. |
Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions) |
Schreibt einen Protokolldatensatz in die FileRecordSequence. Diese Methode kann nicht vererbt werden. |
Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection) |
Schreibt mithilfe von zuvor in der Sequenz reserviertem Speicherplatz einen Protokolldatensatz in die FileRecordSequence. Diese Methode kann nicht vererbt werden. |
Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions) |
Schreibt einen Protokolldatensatz in die FileRecordSequence. Diese Methode kann nicht vererbt werden. |
Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection) |
Schreibt mithilfe von zuvor in der Sequenz reserviertem Speicherplatz einen Protokolldatensatz in die FileRecordSequence. Diese Methode kann nicht vererbt werden. |
BeginAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, AsyncCallback, Object) |
Startet einen asynchronen Anfügevorgang. Diese Methode kann nicht vererbt werden. |
BeginAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, AsyncCallback, Object) |
Startet einen asynchronen Anfügevorgang und verwendet Speicherplatz, der zuvor in der Sequenz reserviert wurde. Diese Methode kann nicht vererbt werden. |
BeginAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, AsyncCallback, Object) |
Startet einen asynchronen Anfügevorgang. Diese Methode kann nicht vererbt werden. |
BeginAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, AsyncCallback, Object) |
Startet einen asynchronen Anfügevorgang und verwendet Speicherplatz, der zuvor in der Sequenz reserviert wurde. Diese Methode kann nicht vererbt werden. |
BeginFlush(SequenceNumber, AsyncCallback, Object) |
Startet einen asynchronen Löschvorgang und verwendet Speicherplatz, der zuvor in der Sequenz reserviert wurde. Diese Methode kann nicht vererbt werden. |
BeginReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[], AsyncCallback, Object) |
Startet einen asynchronen Reservierungs- und Anfügevorgang. Diese Methode kann nicht vererbt werden. |
BeginReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[], AsyncCallback, Object) |
Startet einen asynchronen Reservierungs- und Anfügevorgang. Diese Methode kann nicht vererbt werden. |
BeginWriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection, AsyncCallback, Object) |
Startet einen asynchronen Neustartbereich-Schreibvorgang, wobei der zuvor in der Sequenz reservierte Speicherplatz verwendet wird. Diese Methode kann nicht vererbt werden. |
BeginWriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber, ReservationCollection, AsyncCallback, Object) |
Startet einen asynchronen Neustartbereich-Schreibvorgang, wobei der zuvor in der Sequenz reservierte Speicherplatz verwendet wird. Diese Methode kann nicht vererbt werden. |
CreateReservationCollection() |
Erstellt einen neuen ReservationCollection. Diese Methode kann nicht vererbt werden. |
Dispose() |
Gibt die von einem Objekt verwendeten nicht verwalteten Ressourcen unverzüglich frei. |
EndAppend(IAsyncResult) |
Beendet einen asynchronen Anfügevorgang. Diese Methode kann nicht vererbt werden. |
EndFlush(IAsyncResult) |
Beendet einen asynchronen Löschvorgang. Diese Methode kann nicht vererbt werden. |
EndReserveAndAppend(IAsyncResult) |
Beendet einen asynchronen Reservierungs- und Anfügevorgang. Diese Methode kann nicht vererbt werden. |
EndWriteRestartArea(IAsyncResult) |
Beendet einen asynchronen Neustartbereichsschreibvorgang. Diese Methode kann nicht vererbt werden. |
Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
Flush() |
Stellt sicher, dass alle angefügten Datensätze geschrieben wurden. Diese Methode kann nicht vererbt werden. |
Flush(SequenceNumber) |
Stellt sicher, dass alle angefügten Datensätze geschrieben wurden. Diese Methode kann nicht vererbt werden. |
GetHashCode() |
Fungiert als Standardhashfunktion. (Geerbt von Object) |
GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
ReadLogRecords(SequenceNumber, LogRecordEnumeratorType) |
Gibt eine zählbare Auflistung von Datensätzen in der Sequenz zurück. Diese Methode kann nicht vererbt werden. |
ReadRestartAreas() |
Gibt eine zählbare Auflistung der Neustartbereiche in der Sequenz zurück. Diese Methode kann nicht vererbt werden. |
ReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[]) |
Führt automatisch eine einzelne Reservierung durch und fügt der Sequenz einen Datensatz an. Diese Methode kann nicht vererbt werden. |
ReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[]) |
Führt automatisch eine einzelne Reservierung durch und fügt der Sequenz einen Datensatz an. Diese Methode kann nicht vererbt werden. |
ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
WriteRestartArea(ArraySegment<Byte>) |
Schreibt einen Neustartbereich in die FileRecordSequence. Diese Methode kann nicht vererbt werden. |
WriteRestartArea(ArraySegment<Byte>, SequenceNumber) |
Schreibt einen Neustartbereich in die FileRecordSequence. Diese Methode kann nicht vererbt werden. |
WriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection) |
Schreibt einen Neustartbereich in die FileRecordSequence. Diese Methode kann nicht vererbt werden. |
WriteRestartArea(IList<ArraySegment<Byte>>) |
Schreibt einen Neustartbereich in die FileRecordSequence. Diese Methode kann nicht vererbt werden. |
WriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber) |
Schreibt einen Neustartbereich in die FileRecordSequence. Diese Methode kann nicht vererbt werden. |
WriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber, ReservationCollection) |
Schreibt einen Neustartbereich in die FileRecordSequence. Diese Methode kann nicht vererbt werden. |
Ereignisse
TailPinned |
Tritt auf, wenn die Datensatzsequenz bestimmt, dass das Ende vorgerückt werden muss. Diese Methode kann nicht vererbt werden. |