现在我用来计算大小的所有文件都是文件夹中的文件。我不认为这是全部,因为内容数据库的大小约为15GB。当我计算出10GB左右的所有文件的大小时。有谁知道我可能错过了什么?SharePoint使用API获取单个网站的大小
这是我到目前为止的代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using System.Globalization;
namespace WebSizeTesting
{
class Program
{
static void Main(string[] args)
{
long SiteCollectionBytes = 0;
using (SPSite mainSite = new SPSite("http://sharepoint-test"))
{
// loop through the websites
foreach (SPWeb web in mainSite.AllWebs)
{
long webBytes = GetSPFolderSize(web.RootFolder);
// Add in size of each web site's recycle bin
webBytes += web.RecycleBin.OfType<SPRecycleBinItem>().Select(item => item.Size).ToArray<long>().Sum();
Console.WriteLine("Url: {0}, Size: {1}", web.Url, ConvertBytesToDisplayText(webBytes));
SiteCollectionBytes += webBytes;
}
long siteCollectionRecycleBinBytes = mainSite.RecycleBin.OfType<SPRecycleBinItem>().Select(item => item.Size).ToArray<long>().Sum();
Console.WriteLine("Site Collection Recycle Bin: " + ConvertBytesToDisplayText(siteCollectionRecycleBinBytes));
SiteCollectionBytes += siteCollectionRecycleBinBytes;
}
Console.WriteLine("Total Size: " + ConvertBytesToDisplayText(SiteCollectionBytes));
Console.ReadKey();
}
public static long GetSPFolderSize(SPFolder folder)
{
long byteCount = 0;
// calculate the files in the immediate folder
foreach (SPFile file in folder.Files)
{
byteCount += file.TotalLength;
// also include file versions
foreach (SPFileVersion fileVersion in file.Versions)
{
byteCount += fileVersion.Size;
}
}
// Handle sub folders
foreach (SPFolder subFolder in folder.SubFolders)
{
byteCount += GetSPFolderSize(subFolder);
}
return byteCount;
}
public static string ConvertBytesToDisplayText(long byteCount)
{
string result = "";
if (byteCount > Math.Pow(1024, 3))
{
// display as gb
result = (byteCount/Math.Pow(1024, 3)).ToString("#,#.##", CultureInfo.InvariantCulture) + " GB";
}
else if (byteCount > Math.Pow(1024, 2))
{
// display as mb
result = (byteCount/Math.Pow(1024, 2)).ToString("#,#.##", CultureInfo.InvariantCulture) + " MB";
}
else if (byteCount > 1024)
{
// display as kb
result = (byteCount/1024).ToString("#,#.##", CultureInfo.InvariantCulture) + " KB";
}
else
{
// display as bytes
result = byteCount.ToString("#,#.##", CultureInfo.InvariantCulture) + " Bytes";
}
return result;
}
}
}
编辑下午2:15 3/1/2010 CST我算文件版本为大小的部分代码的能力增加。正如Goyuix在下面的帖子中所建议的那样。它仍然有相当数量的物理数据库大小。
edit 8:38 am 3/3/2010 cst我在计算每个网站的回收站大小和网站集回收站时添加了这些内容。这些更改由ArjanP提出。另外我想补充一点,我非常乐意采取更有效的方式来做到这一点。
真的想回答什么问题?这听起来像你已经从数据库的文件大小。这是一种好奇心,还是有你想要得到的一些具体信息? – Goyuix 2010-03-01 18:14:53
我有数据库的总大小。不过,我希望数据库中每个单独网站的大小,而不仅仅是网站集大小。更具体的说,最终的结果将是一个silverlight控件,它通过网格显示站点层次和每个站点的大小。我已经完成了所有工作,只是总大小与数据库大小不匹配。 – 249076 2010-03-01 19:16:12