現在我用來計算大小的所有文件都是文件夾中的文件。我不認爲這是全部,因爲內容數據庫的大小約爲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