Открытие файлов OLM

Aspose.Email для .NET представляет файл хранилища Outlook for Mac с помощью OlmStorage класс. В этой статье показано, как открыть OLM‑файл из пути или потока, а также как безопасно загрузить файл, который может быть повреждён.

Открыть OLM‑файл

OLM‑файл может быть открыт двумя способами:

  • использование конструктора;
  • использование статического FromFile метод.

Существует различие в поведении между этими двумя подходами, которое влияет на инициализацию иерархии папок. См. Навигация по папкам OLM для деталей.

Использование конструктора

Чтобы открыть файл, вызовите конструктор OlmStorage класс и передайте полное имя файла в качестве аргумента. Потому что OlmStorage реализует IDisposable, оберните его в using оператор, чтобы дескриптор файла был освобождён после завершения работы.

var fileName = "MyStorage.olm";
using (var olm = new OlmStorage(fileName))
{
    // work with the storage
}

Использование статического метода FromFile

Чтобы открыть файл, используйте статический FromFile метода и передать полное имя файла в качестве аргумента:

var fileName = "MyStorage.olm";
using (var olm = OlmStorage.FromFile(fileName))
{
    // work with the storage
}

Открыть OLM‑файл из потока

Когда данные OLM поступают не из локального пути — например, они получены из базы данных, сетевого ресурса или облачного хранилища — вы можете открыть их напрямую из Stream. Используйте OlmStorage(Stream) конструктор или статический FromStream метод.

using (var stream = File.OpenRead("MyStorage.olm"))
using (var olm = new OlmStorage(stream))
{
    // work with the storage
}

Статический метод работает так же:

using (var stream = File.OpenRead("MyStorage.olm"))
using (var olm = OlmStorage.FromStream(stream))
{
    // work with the storage
}

Открыть повреждённый OLM‑файл

Если файл может быть частично повреждён, вы всё равно можете извлечь как можно больше данных без остановки на первой ошибке. Для этого создайте OlmStorage instance с OlmStorage(TraversalExceptionsCallback callback) конструктора, затем загрузите файл с помощью Load вместо FromFile.

Обратный вызов получает исключения, возникшие во время загрузки и обхода, поэтому их можно журналировать или игнорировать. Метод Load method возвращает true если файл загружен успешно и обход возможен, и false если файл слишком повреждён для обхода.

using (var olm = new OlmStorage((exception, id) =>
{
    // Exception handling code.
    Console.WriteLine($"Failed to process item '{id}': {exception.Message}");
}))
{
    if (olm.Load(fileName))
    {
        // The file was loaded and can be traversed.
        var folderHierarchy = olm.GetFolders();
    }
    else
    {
        Console.WriteLine("The OLM file is corrupted and cannot be traversed.");
    }
}

Полный пример извлечения элементов из повреждённого файла доступен в Чтение и извлечение сообщений OLM.