ناوبری در پوشه‌های OLM

یک فایل OLM داده‌های خود را در قالب درختی از پوشه‌ها سازماندهی می‌کند که هر یک توسط یک OlmFolder object. این مقاله نشان می‌دهد چطور سلسله‌مراتب پوشه‌ها را فهرست کنید، پوشهٔ خاصی را بر اساس نام دریافت کنید، به زیرپوشه‌ها بروید و مسیرهای پوشه‌ها را بخوانید.

دریافت سلسله‌مراتب پوشه‌ها

پس از باز شدن فایل، به ساختار دایرکتوری آن از طریق FolderHierarchy ویژگی دسترسی پیدا کنید. این ویژگی فهرستی از OlmFolder اشیائی که هر کدام نمایانگر یک دایرکتوری سطح‌بالا در فایل OLM هستند. برای کاوش عمیق‌تر، SubFolders property هر پوشه که زیر‌دایرکتوری‌هایش را برمی‌گرداند. با استفاده از این دو عضو می‌توانید تمام سلسله‌مراتب را پیمایش کنید.

مثال زیر تمام پوشه‌ها را به‌صورت سلسله‌مراتبی چاپ می‌کند:

using (var olm = new OlmStorage(fileName))
{
    PrintAllFolders(olm.FolderHierarchy, string.Empty);
}

private void PrintAllFolders(IEnumerable<OlmFolder> folderHierarchy, string indent)
{
    foreach (var folder in folderHierarchy)
    {
        Console.WriteLine($"{indent}{folder.Name}");
        PrintAllFolders(folder.SubFolders, indent + "-");
    }
}

FolderHierarchy و متد FromFile

شیوهٔ باز کردن فایل بر نحوهٔ FolderHierarchy رفتار می‌کند:

  • زمانی که فایل را با سازنده باز می‌کنید، FolderHierarchy property به‌طور خودکار مقداردهی می‌شود.
  • زمانی که فایل را با FromFile متد، FolderHierarchy به‌طور پیش‌فرض راه‌اندازی نشده است و مقدار null. در این حالت، فراخوانی کنید GetFolders method به‌صورت صریح برای مقداردهی اولیه سلسله‌مراتب و دریافت فهرست دایرکتوری‌ها:
using (var olm = OlmStorage.FromFile(fileName))
{
    var folders = olm.GetFolders();
}

دریافت پوشه بر اساس نام

برای دریافت یک پوشه واحد بر پایه نام، فراخوانی کنید GetFolder method. نام پوشه را به‌عنوان آرگومان اول و یک مقدار بولی به‌عنوان آرگومان دوم که نشان می‌دهد آیا حروف بزرگ/کوچک در جستجو نادیده گرفته شوند، پاس دهید.

using (var olm = OlmStorage.FromFile(fileName))
{
    // get the Inbox folder by name, ignoring case
    OlmFolder folder = olm.GetFolder("Inbox", true);
}

دریافت زیرپوشه بر اساس نام

Each OlmFolder همچنین به شما امکان می‌دهد یک پوشه فرزند را مستقیماً با GetSubFolder method. نام زیرپوشه و اینکه آیا حروف بزرگ/کوچک نادیده گرفته شوند را پاس دهید. این وقتی مفید است که از پیش پوشهٔ والد را داشته باشید و بخواهید بدون اسکن مجدد تمام سلسله‌مراتب به درون آن بروید.

using (var olm = OlmStorage.FromFile(fileName))
{
    OlmFolder inbox = olm.GetFolder("Inbox", true);

    // get a sub-folder of Inbox by name
    OlmFolder archive = inbox.GetSubFolder("Archive", true);

    if (archive != null)
    {
        Console.WriteLine($"Found sub-folder: {archive.Name}");
    }
}

دريافت مسیرهای پوشه

می‌توانید مسیر کامل هر پوشه را از طریق OlmFolder.Path property. قطعه کد زیر مسیر هر پوشه را در فایل چاپ می‌کند:

using (var storage = new OlmStorage("SampleOLM.olm"))
{
    PrintPath(storage.FolderHierarchy);
}

public static void PrintPath(IEnumerable<OlmFolder> folders)
{
    foreach (OlmFolder folder in folders)
    {
        // print the current folder path
        Console.WriteLine(folder.Path);

        PrintPath(folder.SubFolders);
    }
}