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