FileRecordSequence Costruttori

Definizione

Inizializza una nuova istanza della classe FileRecordSequence.

Overload

Nome Descrizione
FileRecordSequence(String)

Inizializza una nuova istanza della FileRecordSequence classe con un file specificato.

FileRecordSequence(String, FileAccess)

Inizializza una nuova istanza della FileRecordSequence classe con un file specificato e una modalità di accesso.

FileRecordSequence(String, FileAccess, Int32)

Inizializza una nuova istanza della FileRecordSequence classe con un file specificato, una modalità di accesso e una dimensione del file.

FileRecordSequence(String)

Inizializza una nuova istanza della FileRecordSequence classe con un file specificato.

public:
 FileRecordSequence(System::String ^ path);
public FileRecordSequence(string path);
new System.IO.Log.FileRecordSequence : string -> System.IO.Log.FileRecordSequence
Public Sub New (path As String)

Parametri

path
String

Percorso relativo o assoluto per il file incapsulato da questa FileRecordSequence istanza.

Eccezioni

Il file specificato da path non è valido.

Impossibile trovare il file specificato da path .

Impossibile eseguire la richiesta a causa di un'eccezione di I/O imprevista.

Memoria insufficiente per continuare l'esecuzione del programma.

L'accesso per l'archivio log specificato viene negato dal sistema operativo.

Esempio

L'esempio seguente crea una sequenza di record, aggiunge un record, legge i record e infine elimina la sequenza.


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

Commenti

Questo costruttore crea l'accesso in lettura/scrittura al file e apre il file con accesso in lettura alla condivisione. Ciò significa che le richieste di apertura del file per la scrittura da parte di questo o di un altro processo hanno esito negativo fino a quando questa FileRecordSequence istanza non è stata eliminata, ma i tentativi di lettura avranno esito positivo. Se path non viene trovato, viene creato un nuovo file con dimensioni pari a 0 byte.

Si applica a

FileRecordSequence(String, FileAccess)

Inizializza una nuova istanza della FileRecordSequence classe con un file specificato e una modalità di accesso.

public:
 FileRecordSequence(System::String ^ path, System::IO::FileAccess access);
public FileRecordSequence(string path, System.IO.FileAccess access);
new System.IO.Log.FileRecordSequence : string * System.IO.FileAccess -> System.IO.Log.FileRecordSequence
Public Sub New (path As String, access As FileAccess)

Parametri

path
String

Percorso relativo o assoluto per il file incapsulato da questa FileRecordSequence istanza.

access
FileAccess

Valore valido FileAccess che controlla il tipo di accesso che gli utenti devono avere a un file di log.

Eccezioni

Il file specificato da path non è valido.

Impossibile trovare il file specificato da path .

Impossibile eseguire la richiesta a causa di un'eccezione di I/O imprevista.

Memoria insufficiente per continuare l'esecuzione del programma.

L'accesso per l'archivio log specificato viene negato dal sistema operativo.

Si applica a

FileRecordSequence(String, FileAccess, Int32)

Inizializza una nuova istanza della FileRecordSequence classe con un file specificato, una modalità di accesso e una dimensione del file.

public:
 FileRecordSequence(System::String ^ path, System::IO::FileAccess access, int size);
public FileRecordSequence(string path, System.IO.FileAccess access, int size);
new System.IO.Log.FileRecordSequence : string * System.IO.FileAccess * int -> System.IO.Log.FileRecordSequence
Public Sub New (path As String, access As FileAccess, size As Integer)

Parametri

path
String

Percorso relativo o assoluto per il file incapsulato da questa FileRecordSequence istanza.

access
FileAccess

Valore valido FileAccess che controlla il tipo di accesso che gli utenti devono avere a un file di log.

size
Int32

Dimensioni del file di log da aprire.

Eccezioni

Uno o più parametri non rientrano nell'intervallo valido.

Il file specificato da path non è valido.

Impossibile trovare il file specificato da path .

Impossibile eseguire la richiesta a causa di un'eccezione di I/O imprevista.

Memoria insufficiente per continuare l'esecuzione del programma.

L'accesso per l'archivio log specificato viene negato dal sistema operativo.

Si applica a