FileRecordSequence Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Implémente une interface IRecordSequence sur un fichier. Cette classe ne peut pas être héritée.
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
- Héritage
-
FileRecordSequence
- Implémente
Exemples
L'exemple suivant crée une séquence d'enregistrement, y ajoute des enregistrements, puis lit les enregistrements.
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
Remarques
La classe FileRecordSequence est une séquence d'enregistrement basée sur un fichier journal unique dans le système de fichiers. Il s'agit d'une implémentation simple de l'interface IRecordSequence, sur un journal simple basé sur des fichiers.
Pour manipuler un journal basé sur un fichier, le compte qu'utilise votre application doit disposer de privilèges suffisants, conformément aux principes de sécurité du système de fichiers au moment où FileRecordSequence est construite. De plus, une demande FullTrust est faite au moment de la construction. Les résultats de la vérification de l'autorisation sont mis en cache par la suite, conformément au modèle de sécurité de Windows. Vous devez vous assurer que vous n'exposez pas par mégarde le contenu de la séquence d'enregistrement à un utilisateur non autorisé.
Constructeurs
FileRecordSequence(String) |
Initialise une nouvelle instance de la classe FileRecordSequence avec un fichier spécifié. |
FileRecordSequence(String, FileAccess) |
Initialise une nouvelle instance de la classe FileRecordSequence avec un fichier spécifié et un mode d'accès. |
FileRecordSequence(String, FileAccess, Int32) |
Initialise une nouvelle instance de la classe FileRecordSequence avec un fichier spécifié, un mode d'accès et une taille de fichier. |
Propriétés
BaseSequenceNumber |
Obtient le numéro de séquence du premier enregistrement valide dans la séquence FileRecordSequence courante. |
LastSequenceNumber |
Obtient le numéro de séquence supérieur au dernier enregistrement ajouté. |
MaximumRecordLength |
Obtient la taille, en octets, du plus grand enregistrement qu'il est possible d'ajouter ou de lire à partir de cette séquence. |
ReservedBytes |
Obtient le nombre total d'octets ayant été réservés. |
RestartSequenceNumber |
Obtient le numéro de séquence de la zone de reprise la plus récemment écrite. |
RetryAppend |
Obtient ou définit une valeur qui indique si les opérations d'ajout sont réitérées automatiquement ou non, lorsque le journal est complet. |
Méthodes
AdvanceBaseSequenceNumber(SequenceNumber) |
Avance le numéro de séquence de base du journal. Cette méthode ne peut pas être héritée. |
Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions) |
Écrit un enregistrement de journal dans l'interface FileRecordSequence. Cette méthode ne peut pas être héritée. |
Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection) |
Écrit un enregistrement du journal au FileRecordSequence, en utilisant l'espace précédemment réservé dans la séquence. Cette méthode ne peut pas être héritée. |
Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions) |
Écrit un enregistrement de journal dans l'interface FileRecordSequence. Cette méthode ne peut pas être héritée. |
Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection) |
Écrit un enregistrement du journal au FileRecordSequence, en utilisant l'espace précédemment réservé dans la séquence. Cette méthode ne peut pas être héritée. |
BeginAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, AsyncCallback, Object) |
Commence une opération d'ajout asynchrone. Cette méthode ne peut pas être héritée. |
BeginAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, AsyncCallback, Object) |
Commence une opération d'ajout asynchrone, en utilisant l'espace précédemment réservé dans la séquence. Cette méthode ne peut pas être héritée. |
BeginAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, AsyncCallback, Object) |
Commence une opération d'ajout asynchrone. Cette méthode ne peut pas être héritée. |
BeginAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, AsyncCallback, Object) |
Commence une opération d'ajout asynchrone, en utilisant l'espace précédemment réservé dans la séquence. Cette méthode ne peut pas être héritée. |
BeginFlush(SequenceNumber, AsyncCallback, Object) |
Commence une opération de vidage asynchrone, en utilisant l'espace précédemment réservé dans la séquence. Cette méthode ne peut pas être héritée. |
BeginReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[], AsyncCallback, Object) |
Commence une réserve asynchrone et ajoute l'opération. Cette méthode ne peut pas être héritée. |
BeginReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[], AsyncCallback, Object) |
Commence une réserve asynchrone et ajoute l'opération. Cette méthode ne peut pas être héritée. |
BeginWriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection, AsyncCallback, Object) |
Commence une opération asynchrone d'écriture de la zone de reprise en utilisant l'espace précédemment réservé dans la séquence. Cette méthode ne peut pas être héritée. |
BeginWriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber, ReservationCollection, AsyncCallback, Object) |
Commence une opération asynchrone d'écriture de la zone de reprise en utilisant l'espace précédemment réservé dans la séquence. Cette méthode ne peut pas être héritée. |
CreateReservationCollection() |
Crée un ReservationCollection. Cette méthode ne peut pas être héritée. |
Dispose() |
Libère immédiatement les ressources non managées utilisées par un objet. |
EndAppend(IAsyncResult) |
Termine une opération d'ajout asynchrone. Cette méthode ne peut pas être héritée. |
EndFlush(IAsyncResult) |
Termine une opération de vidage asynchrone. Cette méthode ne peut pas être héritée. |
EndReserveAndAppend(IAsyncResult) |
Termine une réserve asynchrone et ajoute l'opération. Cette méthode ne peut pas être héritée. |
EndWriteRestartArea(IAsyncResult) |
Termine une opération d'écriture de la zone de reprise asynchrone. Cette méthode ne peut pas être héritée. |
Equals(Object) |
Détermine si l'objet spécifié est égal à l'objet actuel. (Hérité de Object) |
Flush() |
Vérifie que tous les enregistrements ajoutés ont été écrits. Cette méthode ne peut pas être héritée. |
Flush(SequenceNumber) |
Vérifie que tous les enregistrements ajoutés ont été écrits. Cette méthode ne peut pas être héritée. |
GetHashCode() |
Fait office de fonction de hachage par défaut. (Hérité de Object) |
GetType() |
Obtient le Type de l'instance actuelle. (Hérité de Object) |
MemberwiseClone() |
Crée une copie superficielle du Object actuel. (Hérité de Object) |
ReadLogRecords(SequenceNumber, LogRecordEnumeratorType) |
Retourne une collection dénombrable des enregistrements de la séquence. Cette méthode ne peut pas être héritée. |
ReadRestartAreas() |
Retourne une collection dénombrable des zones de reprise dans la séquence. Cette méthode ne peut pas être héritée. |
ReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[]) |
Fait automatiquement une réservation unique et ajoute un enregistrement à la séquence. Cette méthode ne peut pas être héritée. |
ReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[]) |
Fait automatiquement une réservation unique et ajoute un enregistrement à la séquence. Cette méthode ne peut pas être héritée. |
ToString() |
Retourne une chaîne qui représente l'objet actuel. (Hérité de Object) |
WriteRestartArea(ArraySegment<Byte>) |
Écrit une zone de reprise dans la classe FileRecordSequence. Cette méthode ne peut pas être héritée. |
WriteRestartArea(ArraySegment<Byte>, SequenceNumber) |
Écrit une zone de reprise dans la classe FileRecordSequence. Cette méthode ne peut pas être héritée. |
WriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection) |
Écrit une zone de reprise dans la classe FileRecordSequence. Cette méthode ne peut pas être héritée. |
WriteRestartArea(IList<ArraySegment<Byte>>) |
Écrit une zone de reprise dans la classe FileRecordSequence. Cette méthode ne peut pas être héritée. |
WriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber) |
Écrit une zone de reprise dans la classe FileRecordSequence. Cette méthode ne peut pas être héritée. |
WriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber, ReservationCollection) |
Écrit une zone de reprise dans la classe FileRecordSequence. Cette méthode ne peut pas être héritée. |
Événements
TailPinned |
Se produit lorsque la séquence d'enregistrement spécifie que la fin doit être avancée. Cette méthode ne peut pas être héritée. |