OLM 폴더 탐색

OLM 파일은 데이터를 폴더 트리 구조로 구성하며, 각 폴더는 OlmFolder 객체. 이 문서에서는 폴더 계층을 열거하고, 이름으로 특정 폴더를 검색하고, 하위 폴더를 탐색하며, 폴더 경로를 읽는 방법을 보여줍니다.

폴더 계층 검색

파일을 연 후 다음을 통해 디렉터리 구조에 접근합니다: FolderHierarchy 속성. 이 속성은 목록을 반환합니다: OlmFolder 객체는 OLM 파일의 최상위 디렉터리를 각각 나타냅니다. 더 깊이 탐색하려면 SubFolders 각 폴더의 속성으로 하위 디렉터리를 반환합니다. 이 두 멤버를 사용하면 전체 계층을 탐색할 수 있습니다.

아래 예제는 계층 순서대로 모든 폴더를 인쇄합니다:

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 속성이 자동으로 초기화됩니다.
  • 파일을 열면 FromFile 메서드, FolderHierarchy 는 기본적으로 초기화되지 않으며 null. 이 경우 GetFolders 메서드를 명시적으로 호출하여 계층을 초기화하고 디렉터리 목록을 가져옵니다:
using (var olm = OlmStorage.FromFile(fileName))
{
    var folders = olm.GetFolders();
}

이름으로 폴더 가져오기

이름으로 단일 폴더를 검색하려면 GetFolder 메서드. 첫 번째 인수로 폴더 이름을, 두 번째 인수로 검색 시 대소문자를 무시할지 여부를 나타내는 부울 값을 전달합니다.

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

이름으로 하위 폴더 가져오기

OlmFolder 또한 GetSubFolder 메서드. 하위 폴더 이름과 대소문자를 무시할지 여부를 전달합니다. 기존에 상위 폴더를 보유하고 전체 계층을 다시 스캔하지 않고 하위 폴더로 들어갈 때 유용합니다.

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 속성. 다음 스니펫은 파일의 모든 폴더 경로를 인쇄합니다:

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);
    }
}