LogStore.CreateLogArchiveSnapshot Method ()

 
System_CAPS_noteNote

The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.

Takes a snapshot of the log store state for making a backup.

Namespace:   System.IO.Log
Assembly:  System.IO.Log (in System.IO.Log.dll)

public LogArchiveSnapshot CreateLogArchiveSnapshot()

Return Value

Type: System.IO.Log.LogArchiveSnapshot

A LogArchiveSnapshot object that contains the state necessary to make an archive.

Exception Condition
NotSupportedException

The log store is not archivable.

ObjectDisposedException

The method was called after the sequence has been disposed of.

IOException

An I/O error occurs when creating the archive snapshot.

ArgumentException

An argument is not valid.

InvalidOperationException

An invalid operation has been executed.

OutOfMemoryException

There is not enough memory to continue the execution of a program.

SequenceFullException

The record sequence is full.

UnauthorizedAccessException

Access for the specified log store is denied by the operating system.

The following example shows how to archive a LogStore to an XML document.

class LogBackup
{ 
    static void ArchiveToXML(LogStore logStore, string fileName) 
    {  
        LogArchiveSnapshot snapshot = logStore.CreateLogArchiveSnapshot();

        XmlTextWriter writer = new XmlTextWriter(fileName, 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", Convert.ToBase64String(data)); 
            }
            writer.WriteEndElement();
        }
        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 = reader.ReadElementString("path"); 
                long length = Int64.Parse(reader.ReadElementString("length")); 
                long offset = Int64.Parse(reader.ReadElementString("offset")); 
                string dataString = reader.ReadElementString("data"); 
                byte[] data = 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(); 
        } 
    } 
}

.NET Framework
Available since 3.0
Return to top
Show: