【问题标题】:Copy folders from Sharepoint by modified date按修改日期从 Sharepoint 复制文件夹
【发布时间】:2011-06-22 15:12:36
【问题描述】:

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

谢谢 雅库布

【问题讨论】:

  • 嗨,它是 Sharepoint 2007,使用 windows authetication,我什么都没有:) 我认为访问 sharepoint 没问题,我需要找到旧文件夹。我相信,复制它们是最简单的部分,但如果你能帮助我完成整个事情,我将不胜感激。

标签: sharepoint copy directory


【解决方案1】:

我编写了这个示例代码,您可以使用它来了解它是如何完成的,或者您可以直接使用它,因为它似乎工作正常。

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。

【讨论】:

  • 谢谢你。很抱歉在这方面是个新手,但我不知道如何让它以用户单击按钮的方式工作,它会按照描述为他完成工作?另外,我不确定什么是“your_web_url”和“your_doclib_url”。对不起,我是个新手,但我尽量不要……
  • 网站网址类似于 htt_p://your_sharepoint_server_name。 Doclib url 通常是文档库的名称。如果您想要一个共享点站点中的按钮来执行此任务,您可以使用 SPContext.Current.Site 而不是使用 (SPSite = new SPSite(..))。只需将此代码放在按钮的 onclick 事件上并设置文档库名称即可。如果还不清楚,请提出问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-19
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多