我正在尝试使用EWS 2010托管API来获取用户邮箱的总大小。我还没有找到一个Web服务方法来获取这些数据,所以我想我会试着去计算它。我在另一个网站上发现了一个关于finding mailbox sizes with EWS 2007的看似适用的问题,但要么我不理解它要求我做什么,要么这种方法不适用于EWS 2010.如何获取Exchange Web Services 2010托管API的文件夹大小?
在代码洞察中,我能写什么,我的想法是,将递归遍历文件夹结构,并导致总共为收件箱中的所有文件夹的方法:
private int traverseChildFoldersForSize(Folder f)
{
int folderSizeSum = 0;
if (f.ChildFolderCount > 0)
{
foreach (Folder c in f.FindFolders(new FolderView(10000)))
{
folderSizeSum += traverseChildFoldersForSize(c);
}
}
folderSizeSum += (int)f.ManagedFolderInformation.FolderSize;
return folderSizeSum;
}
(假设有一个内不超过10,000个文件夹这是一个安全的赌注......)
不幸的是,这是行不通的。
我开始使用此代码递归:
Folder root = Folder.Bind(svc, WellKnownFolderName.Inbox);
int totalSize = traverseChildFoldersForSize(root);
但一个空引用异常被抛出,基本上说[folder].ManagedFolderInformation
是一个空对象引用。
为清楚起见,我也试图刚刚得到的根文件夹的大小:
Console.Write(root.ManagedFolderInformation.FolderSize.ToString());
哪个扔相同NRE异常,所以我知道这不仅仅是因为一旦你到了一定深度ManagedFolderInformation不存在的目录树。
有关如何获取用户邮箱总大小的任何想法?我吠叫错了树吗?
你救了我的一天,但你的byteformating isn't完美的,使用此: '静态双倍ConvertBytesToMb(长字节) { \t return(bytes/1024f)/ 1024f; }' – jwillmer 2012-02-14 15:55:53