LogStore.CreateLogArchiveSnapshot 方法

定义

拍摄制作备份所需的日志存储区状态的快照。

重载

CreateLogArchiveSnapshot()

拍摄日志存储区状态的快照,以制作备份。

CreateLogArchiveSnapshot(SequenceNumber, SequenceNumber)

拍摄指定序列号之间的日志存储区状态的快照,以制作备份。

CreateLogArchiveSnapshot()

拍摄日志存储区状态的快照,以制作备份。

public System.IO.Log.LogArchiveSnapshot CreateLogArchiveSnapshot ();

返回

一个包含制作存档所需状态的 LogArchiveSnapshot 对象。

例外

日志存储区不可存档。

该方法是在序列已释放之后调用的。

创建存档快照时发生 I/O 错误。

自变量无效。

执行了无效的操作。

没有足够的内存来继续执行程序。

记录序列已满。

操作系统拒绝了对指定的日志存储区的访问。

示例

下面的示例演示如何将 LogStore 存档到 XML 文档。

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 4.8.1 和其他版本
产品 版本
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

CreateLogArchiveSnapshot(SequenceNumber, SequenceNumber)

拍摄指定序列号之间的日志存储区状态的快照,以制作备份。

public System.IO.Log.LogArchiveSnapshot CreateLogArchiveSnapshot (System.IO.Log.SequenceNumber first, System.IO.Log.SequenceNumber last);

参数

first
SequenceNumber

要存档的范围中的起始序列号。

last
SequenceNumber

要存档的范围中的结束序列号。

返回

一个包含制作存档所需状态的 LogArchiveSnapshot 对象。

例外

firstlast 不在此序列的基序列号和最新序列号之间。

first 大于 last

执行了无效的操作。

创建存档快照时发生 I/O 错误。

日志存储区不可存档。

该方法是在序列已释放之后调用的。

没有足够的内存来继续执行程序。

记录序列已满。

操作系统拒绝了对指定的日志存储区的访问。

注解

此方法返回的存档快照包含从基序列号或存档序列号(两者的较低者)到最新序列号之间的信息。 其中不包含最新序列号,这表示,存档仅包含截至但不包括最后一条的记录。 此外,使用此方法时,起始 SequenceNumber 必须等于 BaseSequenceNumber,以保证存档的一致性。

适用于

.NET Framework 4.8.1 和其他版本
产品 版本
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1