c# - 你如何统计Outlook邮箱下的每个子文件夹?

标签 c#

使用 Microsoft Outlook 14.0 对象库引用和下面的代码,我想计算邮箱下列出的所有文件夹,包括每个子文件夹,但我遇到了问题。

enter image description here

此代码只计算顶级文件夹和二级文件夹,但不计算下面的任何子文件夹。我在 countRootFolders 方法中的 foreach 语句中有问题,但我无法解决。谁能帮忙?

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

非常感谢任何帮助!!

最佳答案

在我看来你的循环只询问每个第一级文件夹他们有多少文件夹。因此,您可以获得根目录中的文件夹数量,以及每个文件夹下一级的文件夹数量,但它不会遍历文件夹树以询问更多级别它们有多少。

这是一个简单的树遍历问题。

您必须实现一个递归函数来向下遍历文件夹结构以获得准确的计数。

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

用你想要计数的根文件夹调用它,它应该非常接近你所追求的。

关于c# - 你如何统计Outlook邮箱下的每个子文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8594955/

相关文章:

c# - Asp.net & 文件修改?

c# - Nunit 断言 - Assert.False(true) 与 Assert.True(false)

c# - 如何让一个代码运行在所有的aspx页面上?

c# - 在字符串的二进制搜索中应用索引

c# - byte[] 到文本文件的数据包转储/十六进制 View 格式

c# - 如何在 win64 上禁用重定向

c# - 将 System.Color 转换为 Microsoft Word WdColor

C# Message.CreateMessage() Android/Java 等效项

c# - WCF 服务不喜欢单引号

C# 生成 depedancies 图形/图表?