我需要创建一个简单的程序,它通过Sharepoint上的用户指定目录找到所有超过1个月的文件夹,然后将它们复制到某个本地硬盘。 也许它以这个文件夹被移动到.......
的方式创建了一些日志由于 的Jakub
答案 0 :(得分:3)
我编写了这个示例代码,您可以使用它来了解它是如何完成的,或者您可以使用它,因为它似乎工作正常。
class Program
{
static void Main(string[] args)
{
MoveFolders("your_web_url", "your_doclib_url");
}
public static void MoveFolders(string webUrl, string listUrl)
{
using (SPSite site = new SPSite(webUrl))
{
using (SPWeb web = site.OpenWeb())
{
SPList targetList = web.GetList(web.Url + "/" + listUrl);
MoveFolders(targetList.RootFolder, @"C:\test"); // path to your local storage folder
}
}
}
public static void MoveFolders(SPFolder targetFolder, string rootLocalPath)
{
string currentPath = Path.Combine(rootLocalPath, targetFolder.Name);
if (!Directory.Exists(currentPath))
Directory.CreateDirectory(currentPath);
DateTime lastModified = (DateTime)targetFolder.Properties["vti_timelastmodified"]; //folder last modified date
if (lastModified < DateTime.Today.AddMonths(-1))
SaveFolderLocal(targetFolder, currentPath);
foreach (SPFolder folder in targetFolder.SubFolders)
{
MoveFolders(folder, currentPath);
}
}
public static void SaveFolderLocal(SPFolder folder, string localStoragePath)
{
foreach (SPFile file in folder.Files)
{
var contents = file.OpenBinary();
using (FileStream fileStream = new FileStream(Path.Combine(localStoragePath, file.Name), FileMode.Create))
{
fileStream.Write(contents, 0, contents.Length);
}
}
}
}
此代码将在本地保存您的doclib文件夹结构,其中包含一个多月前修改过的任何文件夹的内容。请注意使用递归的MoveFolders方法,因为它会导致具有非常复杂的文件夹结构的库上的StackOverflowException。