Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-Outlook-访问新日历_C#_Calendar_Outlook - Fatal编程技术网

C#-Outlook-访问新日历

C#-Outlook-访问新日历,c#,calendar,outlook,C#,Calendar,Outlook,我正在尝试使用C#读取outlook中的所有日历,但在访问outlook中创建的日历时遇到问题(右键单击->新建日历) 我试图通过以下方式获得他们: Outlook.Application app = new Outlook.Application(); Outlook.NameSpace ns = app.GetNamespace("MAPI"); Outlook.MAPIFolder folderss = ns.GetDefaultFolder(Outlook.OlDefaultFold

我正在尝试使用C#读取outlook中的所有日历,但在访问outlook中创建的日历时遇到问题(右键单击->新建日历)

我试图通过以下方式获得他们:

Outlook.Application app = new Outlook.Application();
Outlook.NameSpace ns = app.GetNamespace("MAPI");
Outlook.MAPIFolder folderss =   ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);
或通过:

Application.Session.Stores
但是没有一个有我的新日历


您知道如何访问它们吗?

日历只是
文件夹
,带有
DefaultItemType

它们可以在
文件夹
层次结构的任何级别的Outlook
存储
中创建

假设日历是在某个
存储区的根文件夹中创建的,则以下
C#
代码将找到它:

 void findMyCalendar(String name)
    {
        string path = null;

        Outlook.Application app = new Outlook.Application();
        Outlook.NameSpace ns = app.GetNamespace("MAPI");

        //  there may be more than one Store
        //  each .ost and .pst file is a Store
        Outlook.Folders folders = ns.Folders;

        foreach (Outlook.Folder folder in folders)
        {
            Outlook.MAPIFolder root = folder;
            path = findCalendar(root, name);

            if (path != null)
            {
                break;
            }
        }

        MessageBox.Show(path ?? "not found!");
    }

//  non-recursive search for just one level
public string findCalendar(MAPIFolder root, string name)
    {
        string path = null;

        foreach (Outlook.MAPIFolder folder in root.Folders) 
        {
            if (folder.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase) &&
                (folder.DefaultItemType == OlItemType.olAppointmentItem))
            {
                path = folder.FolderPath;
                break;
            }
        }

        return path;
    }