按修改日期从Sharepoint复制文件夹

按修改日期从Sharepoint复制文件夹,sharepoint,copy,directory,Sharepoint,Copy,Directory,我需要创建一个简单的程序,它通过Sharepoint上用户给定的目录,找到所有超过1个月的文件夹,然后将它们复制到本地硬盘。 也许它会以将此文件夹移动到的方式创建一些日志 谢谢 Jakub我编写了这个示例代码,您可以使用它来理解如何实现,或者您可以直接使用它,因为它似乎工作得很好 class Program { static void Main(string[] args) { MoveFolders("your_web_url", "your_doclib_ur

我需要创建一个简单的程序,它通过Sharepoint上用户给定的目录,找到所有超过1个月的文件夹,然后将它们复制到本地硬盘。 也许它会以将此文件夹移动到的方式创建一些日志

谢谢
Jakub

我编写了这个示例代码,您可以使用它来理解如何实现,或者您可以直接使用它,因为它似乎工作得很好

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);
            }
        }
    }
}
类程序
{
静态void Main(字符串[]参数)
{
移动文件夹(“你的网页url”、“你的文档库url”);
}
公共静态文件夹(字符串webUrl、字符串listUrl)
{
使用(SPSite站点=新SPSite(webUrl))
{
使用(SPWeb=site.OpenWeb())
{
SPList targetList=web.GetList(web.Url+“/”+listUrl);
MoveFolders(targetList.RootFolder,@“C:\test”);//本地存储文件夹的路径
}
}
}
公共静态void MoveFolders(SPFolder targetFolder,string rootLocalPath)
{
字符串currentPath=Path.Combine(rootLocalPath,targetFolder.Name);
如果(!Directory.Exists(currentPath))
CreateDirectory(当前路径);
DateTime lastModified=(DateTime)targetFolder.Properties[“vti_timelastmodified”];//文件夹上次修改日期
如果(lastModified

此代码将在本地保存doclib文件夹结构,其中包含一个多月前修改的任何文件夹的内容。使用recursive MoveFolders方法时要小心,因为它会在文件夹结构非常复杂的库上导致StackOverflowException。

您好,这是Sharepoint 2007,使用windows身份验证,我什么都没有:)我认为访问Sharepoint没有问题,我需要找到旧文件夹。我相信,复制它们是最容易的,但是如果你能帮我完成这件事,我会很感激的。谢谢你。很抱歉,在这方面我是一个新手,但我不知道如何让它以一种方式工作,用户点击一个按钮,它将为他完成所描述的工作?另外,我也不确定什么是“你的网页url”和“你的文档库url”。很抱歉,我是个新手,但我尽量不这样做……网站url类似于htt\u p://您的\u sharepoint\u服务器\u名称。文档库url通常是文档库的名称。如果您希望sharepoint站点中的按钮执行此任务,可以使用SPContext.Current.site而不是(SPSite=new SPSite(..)。只需将此代码放在按钮的onclick事件上并设置文档库名称。如果还不清楚,请提问。