2011-02-07 3 views
2

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

Благодарности Якуб

+0

Привет, это Sharepoint 2007, используя windows authetation, и у меня ничего нет. Я думаю, что доступ к sharepoint не проблема, мне нужно будет найти старые папки. Я считаю, что их копирование - самая легкая часть, но если вы можете помочь мне со всем этим, я был бы признателен. –

ответ

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

+0

Спасибо за это. Извините за то, что я новичок в этом, но я не знаю, как заставить его работать таким образом, что пользователь нажимает кнопку, и он выполнит эту работу для него, как описано? Кроме того, я не уверен, что такое «your_web_url» и «your_doclib_url». Извините за то, что я такой новичок, но я стараюсь не быть ... –

+0

URL-адрес сайта - это что-то вроде htt_p: // your_sharepoint_server_name. URL-адрес Doclib обычно называется библиотекой документов. Если вы хотите кнопку на сайте sharepoint, которая будет выполнять эту задачу, вы можете использовать SPContext.Current.Site вместо использования (SPSite = новый SPSite (..)). Просто поместите этот код в onclick-событие кнопки и задайте имя библиотеки документов. Пожалуйста, задавайте вопросы, если это еще не ясно. – EvgK