2011-12-21 2 views
2

Microsoft Outlook 14.0 개체 라이브러리 참조 및 아래 코드를 사용하여 모든 하위 폴더를 포함하여 사서함 아래에 나열된 모든 폴더 수를 계산하고 싶지만 문제가 있습니다.Outlook 사서함의 하위 폴더는 어떻게 계산합니까?

enter image description here

이 코드는 최상위 폴더와 두 번째 수준 폴더를 계산하지만, 아래에 하위 폴더를 계산하지 않습니다. foreach 문 내에서 countRootFolders 메서드의 문제가 있지만 작동하지 않습니다. 누구든지 도와 줄 수 있습니까?

Microsoft.Office.Interop.Outlook.Application app = null; 
Microsoft.Office.Interop.Outlook._NameSpace ns = null; 

private void button1_Click(object sender, EventArgs e) 
{ 
    app = new Microsoft.Office.Interop.Outlook.Application(); 
    ns = app.GetNamespace("MAPI"); 
    MessageBox.Show(countRootFolders().ToString()); 
} 

public int countRootFolders() 
{ 
    Microsoft.Office.Interop.Outlook.MAPIFolder rootFolder = this.ns.Session.DefaultStore.GetRootFolder(); 
    int rootCount = rootFolder.Folders.Count; 

    foreach (Microsoft.Office.Interop.Outlook.MAPIFolder subfolder in rootFolder.Folders) 
    { 
     rootCount += subfolder.Folders.Count; 
    } 

    return rootCount; 
} 

어떤 도움도 크게 appreicated !!

+0

재귀를 이해하려면 먼저 재귀를 이해해야합니다. – zeroef

+0

새 코드 ... MessageBox.Show (countRootFolders (rootFolder) .ToString()); public int countRootFolders (Microsoft.Office.Interop.Outlook.MAPIFolder aFolder) { int rootCount = aFolder.Folders.Count; foreach (aFolder.Folders의 Microsoft.Office.Interop.Outlook.MAPIFolder 하위 폴더) { rootCount + = countRootFolders (하위 폴더); } return rootCount; } –

답변

2

당신의 루프가 단지 얼마나 많은 폴더를 가지고 있는지 첫 번째 레벨 폴더마다 묻습니다. 따라서 루트에있는 폴더 수와 각 폴더의 수는 한 수준 아래에 있지만 폴더 트리를 거쳐 더 많은 수의 레벨이 있는지 묻지는 않습니다.

이것은 간단한 트리 탐색 문제입니다.

정확하게 계산하려면 폴더 구조를 탐색하는 재귀 함수를 구현해야합니다.

public int countRootFolders(Microsoft.Office.Interop.Outlook.MAPIFolder aFolder) 
{ 
    int rootCount = aFolder.Folders.Count; 

    foreach (Microsoft.Office.Interop.Outlook.MAPIFolder subfolder in aFolder.Folders) 
    { 
     rootCount += countRootFolders(subFolder); 
    } 

    return rootCount; 
} 

루트 폴더를 사용하여 전화를 걸면 나중에 걸려있는 전화와 매우 비슷해야합니다.

+1

완벽하게 작동했습니다 ... 감사합니다. Digitlworld !!!! –

관련 문제