การนำทางโฟลเดอร์ 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);
}

ดึงโฟลเดอร์ย่อยตามชื่อ

แต่ละ 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);
    }
}