Копировать папки из Sharepoint по дате изменения - PullRequest
2 голосов
/ 07 февраля 2011

Мне нужно создать простую программу, которая просматривает пользовательский каталог на Sharepoint и находит все папки старше 1 месяца, а затем копирует их на какой-то локальный жесткий диск. Возможно, он создает журнал таким образом, чтобы эта папка была перемещена в .......

Спасибо Якуб

1 Ответ

3 голосов
/ 07 февраля 2011

Я написал этот пример кода, который вы можете использовать, чтобы понять, как это можно сделать, или вы можете просто использовать его, потому что он, кажется, работает нормально.

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 для библиотек с очень сложной структурой папок.

...