【发布时间】:2012-06-29 08:50:13
【问题描述】:
现在我用来计算大小的只是文件夹中的文件。我不认为这就是全部,因为内容数据库大小约为 15gb。当我计算所有文件的大小时,我得到大约 10gb。有谁知道我可能会错过什么?
这是我目前的代码。
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;
}
}
}
edit 2:15 pm 3/1/2010 cst 我添加了将文件版本计数为代码大小的一部分的功能。正如 Goyuix 在下面的帖子中所建议的那样。它仍然与物理数据库大小相差很大。
edit 8:38 am 3/3/2010 cst 我在计算每个网站的回收站大小和网站集回收站时添加了。 ArjanP 建议的这些更改。我还想补充一点,我非常愿意接受更有效的方法。
【问题讨论】:
-
真正想要回答的问题是什么?听起来您已经从数据库中获得了文件大小。这是出于好奇还是您想要获取的特定信息?
-
我有数据库的总大小。但是,我想要数据库中每个单独网站的大小,而不仅仅是网站集的大小。更具体地说,最终结果将是一个 silverlight 控件,它在网格中显示站点层次结构以及每个站点的大小。我已经全部搞定了,只是总大小与数据库大小不匹配。
标签: c# sharepoint sharepoint-2007