FileRegion.GetStream Método

Definição

Retorna um fluxo que pode ser usado para ler os dados a serem arquivados.Returns a stream that can be used to read the data to be archived.

public:
 System::IO::Stream ^ GetStream();
public System.IO.Stream GetStream ();
member this.GetStream : unit -> System.IO.Stream
Public Function GetStream () As Stream

Retornos

Stream

O fluxo que contém os dados a serem arquivados.A stream that contains the data to be archived.

Exceções

A solicitação não pôde ser executada devido a uma exceção de E/S inesperada.The request could not be performed because of an unexpected I/O exception.

Não há suporte para a operação.The operation is not supported.

O método foi chamado depois que a sequência foi descartada.The method was called after the sequence has been disposed of.

Não há memória suficiente para continuar a execução do programa.There is not enough memory to continue the execution of the program.

O acesso ao repositório de log especificado é negado pelo sistema operacional.Access for the specified log store is denied by the operating system.

Exemplos

O exemplo a seguir demonstra como arquivar um repositório de logs em XML usando as LogStore FileRegion classes e.The following example demonstrates how to archive a log store to XML using the LogStore and FileRegion classes.

class LogBackup
{
    static void ArchiveToXML(LogStore logStore, string fileName)
    {

        LogArchiveSnapshot snapshot = logStore.CreateLogArchiveSnapshot();
        {
            XmlTextWriter writer = new XmlTextWriter(fileName, System.Text.Encoding.ASCII);
            writer.WriteStartElement("logArchive");

            foreach (FileRegion region in snapshot.ArchiveRegions)
            {
                writer.WriteStartElement("fileRegion");
                writer.WriteElementString("path",
                                          region.Path);
                writer.WriteElementString("length",
                                        region.FileLength.ToString());
                writer.WriteElementString("offset",
                                          region.Offset.ToString());

                using (Stream dataStream = region.GetStream())
                {
                    byte[] data = new byte[dataStream.Length];
                    dataStream.Read(data, 0, data.Length);

                    writer.WriteElementString("data", System.Convert.ToBase64String(data));
                }

                writer.WriteEndElement();
            }

            writer.Close();
            logStore.SetArchiveTail(snapshot.LastSequenceNumber);
        }
    }

    static void RestoreFromXML(string fileName)
    {
        using (XmlTextReader reader = new XmlTextReader(fileName))
        {
            reader.ReadStartElement("logArchive");
            while (reader.IsStartElement())
            {
                string path;
                long length;
                long offset;
                path = reader.ReadElementString("path");
                length = System.Int64.Parse(reader.ReadElementString("length"));
                offset = System.Int64.Parse(reader.ReadElementString("offset"));
                string dataString = reader.ReadElementString("data");
                byte[] data = System.Convert.FromBase64String(dataString);
                FileStream fileStream;
                using (fileStream = new FileStream(path,
                                              FileMode.OpenOrCreate,
                                              FileAccess.Write))
                {
                    fileStream.SetLength(length);
                    fileStream.Position = offset;
                    fileStream.Write(data, 0, data.Length);
                }
            }
            reader.ReadEndElement();
        }
    }
}
Friend Class LogBackup
    Private Shared Sub ArchiveToXML(ByVal logStore As LogStore, ByVal fileName As String)


        Dim snapshot As LogArchiveSnapshot = logStore.CreateLogArchiveSnapshot()
            Dim writer As New XmlTextWriter(fileName, System.Text.Encoding.ASCII)
            writer.WriteStartElement("logArchive")

        For Each region As FileRegion In snapshot.ArchiveRegions
            With writer
                .WriteStartElement("fileRegion")
                .WriteElementString("path", region.Path)
                .WriteElementString("length", region.FileLength.ToString())
                .WriteElementString("offset", region.Offset.ToString())
            End With

            Using dataStream As Stream = region.GetStream()
                Dim data(dataStream.Length - 1) As Byte
                dataStream.Read(data, 0, data.Length)

                writer.WriteElementString("data", System.Convert.ToBase64String(data))
            End Using

            writer.WriteEndElement()
        Next region

            writer.Close()
            logStore.SetArchiveTail(snapshot.LastSequenceNumber)
    End Sub

    Private Shared Sub RestoreFromXML(ByVal fileName As String)
        Using reader As New XmlTextReader(fileName)
            reader.ReadStartElement("logArchive")
            Do While reader.IsStartElement()
                Dim path As String
                Dim length As Long
                Dim offset As Long
                path = reader.ReadElementString("path")
                length = System.Int64.Parse(reader.ReadElementString("length"))
                offset = System.Int64.Parse(reader.ReadElementString("offset"))
                Dim dataString = reader.ReadElementString("data")
                Dim data() = System.Convert.FromBase64String(dataString)
                Dim fileStream As FileStream
                fileStream = New FileStream(path, FileMode.OpenOrCreate, FileAccess.Write)
                Using fileStream
                    fileStream.SetLength(length)
                    fileStream.Position = offset
                    fileStream.Write(data, 0, data.Length)
                End Using
            Loop
            reader.ReadEndElement()
        End Using
    End Sub
End Class

Aplica-se a