FileRecordSequence 클래스

정의

파일 위에 IRecordSequence를 구현합니다.Implements an IRecordSequence on top of a file. 이 클래스는 상속될 수 없습니다.This class cannot be inherited.

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
구현

예제

다음 예제에서는 레코드 시퀀스를 만들어 레코드를 추가한 후 레코드를 읽습니다.The following example creates a record sequence, appends record to it, and finally reads the records.


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는 파일 시스템에서 간단한 로그 파일에 기반을 둔 레코드 시퀀스입니다.The FileRecordSequence is a record sequence based on a single log file in the file system. 이 시퀀스는 간단한 파일 기반 로그 위에 IRecordSequence 인터페이스를 간단히 구현한 것입니다.It is a simple implementation of the IRecordSequence interface, on top of a simple file-based log.

파일 기반 로그를 조작하려면 FileRecordSequence가 생성되는 시점에 파일 시스템 보안에서 규정하는 대로, 애플리케이션을 실행하는 계정에 충분한 권한이 있어야 합니다.To manipulate a file-based log, the account that your application is running in must have sufficient privileges, as dictated by the file system security at the time the FileRecordSequence is constructed. 또한 생성 시점에 FullTrust가 요청되며,In addition, a demand for FullTrust is made at construction time. 그 후 Windows 보안 모델에 따라 권한 확인 결과가 캐시됩니다.The permission verification results are cached thereafter in keeping with the Windows security model. 레코드 시퀀스의 내용을 권한 없는 사용자에게 실수로 공개하지 않도록 주의해야 합니다.You should ensure that you do not accidentally expose the contents of the record sequence to an unauthorized user.

생성자

FileRecordSequence(String)

지정된 파일을 사용하여 FileRecordSequence 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the FileRecordSequence class with a specified file.

FileRecordSequence(String, FileAccess)

지정된 파일과 액세스 모드를 사용하여 FileRecordSequence 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the FileRecordSequence class with a specified file and an access mode.

FileRecordSequence(String, FileAccess, Int32)

지정된 파일, 액세스 모드, 파일 크기를 사용하여 FileRecordSequence 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the FileRecordSequence class with a specified file, an access mode, and a file size.

속성

BaseSequenceNumber

현재 FileRecordSequence에서 유효한 첫 번째 레코드의 시퀀스 번호를 가져옵니다.Gets the sequence number of the first valid record in the current FileRecordSequence.

LastSequenceNumber

마지막으로 추가된 레코드보다 큰 시퀀스 번호를 가져옵니다.Gets the sequence number which is greater than the last record appended.

MaximumRecordLength

이 시퀀스에 추가하거나 읽을 수 있는 가장 큰 레코드의 크기(바이트)를 가져옵니다.Gets the size of the largest record that can be appended to or read from this sequence, in bytes.

ReservedBytes

예약된 총 바이트 수를 가져옵니다.Gets the total number of bytes that have been reserved.

RestartSequenceNumber

가장 최근에 쓴 재시작 영역의 시퀀스 번호를 가져옵니다.Gets the sequence number of the most recently written restart area.

RetryAppend

로그가 꽉 차는 경우 추가 작업이 자동으로 다시 시도되는지 여부를 나타내는 값을 가져오거나 설정합니다.Gets or sets a value indicating whether or not appends are automatically retried if the log is full.

메서드

AdvanceBaseSequenceNumber(SequenceNumber)

로그의 기준 시퀀스 번호를 앞으로 이동합니다.Moves the base sequence number of the log forward. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions)

로그 레코드를 FileRecordSequence에 씁니다.Writes a log record to the FileRecordSequence. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection)

시퀀스에서 이전에 예약된 공간을 사용하여 로그 레코드를 FileRecordSequence에 씁니다.Writes a log record to the FileRecordSequence, using space previously reserved in the sequence. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions)

로그 레코드를 FileRecordSequence에 씁니다.Writes a log record to the FileRecordSequence. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection)

시퀀스에서 이전에 예약된 공간을 사용하여 로그 레코드를 FileRecordSequence에 씁니다.Writes a log record to the FileRecordSequence, using space previously reserved in the sequence. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

BeginAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, AsyncCallback, Object)

비동기 추가 작업을 시작합니다.Begins an asynchronous append operation. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

BeginAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, AsyncCallback, Object)

시퀀스에서 이전에 예약된 공간을 사용하여 비동기 추가 작업을 시작합니다.Begins an asynchronous append operation using space previously reserved in the sequence. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

BeginAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, AsyncCallback, Object)

비동기 추가 작업을 시작합니다.Begins an asynchronous append operation. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

BeginAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, AsyncCallback, Object)

시퀀스에서 이전에 예약된 공간을 사용하여 비동기 추가 작업을 시작합니다.Begins an asynchronous append operation using space previously reserved in the sequence. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

BeginFlush(SequenceNumber, AsyncCallback, Object)

시퀀스에서 이전에 예약된 공간을 사용하여 비동기 플러시 작업을 시작합니다.Begins an asynchronous flush operation, using space previously reserved in the sequence. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

BeginReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[], AsyncCallback, Object)

비동기 예약 및 추가 작업을 시작합니다.Begins an asynchronous reserve and append operation. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

BeginReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[], AsyncCallback, Object)

비동기 예약 및 추가 작업을 시작합니다.Begins an asynchronous reserve and append operation. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

BeginWriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection, AsyncCallback, Object)

시퀀스에서 이전에 예약된 공간을 사용하여 비동기 재시작 영역 쓰기 작업을 시작합니다.Begins an asynchronous restart area write operation, using space previously reserved in the sequence. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

BeginWriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber, ReservationCollection, AsyncCallback, Object)

시퀀스에서 이전에 예약된 공간을 사용하여 비동기 재시작 영역 쓰기 작업을 시작합니다.Begins an asynchronous restart area write operation, using space previously reserved in the sequence. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

CreateReservationCollection()

ReservationCollection를 만듭니다.Creates a new ReservationCollection. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

Dispose()

개체에서 사용하는 관리되지 않는 리소스를 즉시 해제합니다.Immediately releases the unmanaged resources used by an object.

EndAppend(IAsyncResult)

비동기 추가 작업을 끝냅니다.Ends an asynchronous append operation. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

EndFlush(IAsyncResult)

비동기 플러시 작업을 끝냅니다.Ends an asynchronous flush operation. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

EndReserveAndAppend(IAsyncResult)

비동기 예약 및 추가 작업을 끝냅니다.Ends an asynchronous reserve and append operation. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

EndWriteRestartArea(IAsyncResult)

비동기 재시작 영역 쓰기 작업을 끝냅니다.Ends an asynchronous restart area write operation. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object.

(다음에서 상속됨 Object)
Flush()

추가된 모든 레코드를 썼는지 확인합니다.Ensures that all appended records have been written. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

Flush(SequenceNumber)

추가된 모든 레코드를 썼는지 확인합니다.Ensures that all appended records have been written. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
ReadLogRecords(SequenceNumber, LogRecordEnumeratorType)

시퀀스에 있는 레코드의 열거 가능한 컬렉션을 반환합니다.Returns an enumerable collection of records in the sequence. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

ReadRestartAreas()

시퀀스에 있는 재시작 영역의 열거 가능한 컬렉션을 반환합니다.Returns an enumerable collection of the restart areas in the sequence. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

ReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[])

자동으로 단일 예약을 만들고 시퀀스에 레코드를 추가합니다.Automatically makes a single reservation and appends a record to the sequence. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

ReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[])

자동으로 단일 예약을 만들고 시퀀스에 레코드를 추가합니다.Automatically makes a single reservation and appends a record to the sequence. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(다음에서 상속됨 Object)
WriteRestartArea(ArraySegment<Byte>)

FileRecordSequence에 재시작 영역을 씁니다.Writes a restart area to the FileRecordSequence. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

WriteRestartArea(ArraySegment<Byte>, SequenceNumber)

FileRecordSequence에 재시작 영역을 씁니다.Writes a restart area to the FileRecordSequence. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

WriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection)

FileRecordSequence에 재시작 영역을 씁니다.Writes a restart area to the FileRecordSequence. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

WriteRestartArea(IList<ArraySegment<Byte>>)

FileRecordSequence에 재시작 영역을 씁니다.Writes a restart area to the FileRecordSequence. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

WriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber)

FileRecordSequence에 재시작 영역을 씁니다.Writes a restart area to the FileRecordSequence. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

WriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber, ReservationCollection)

FileRecordSequence에 재시작 영역을 씁니다.Writes a restart area to the FileRecordSequence. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

이벤트

TailPinned

레코드 시퀀스에서 테일이 앞으로 이동해야 한다고 결정하면 발생합니다.Occurs when the record sequence determines that the tail must be moved forward. 이 메서드는 상속될 수 없습니다.This method cannot be inherited.

적용 대상