2011-02-07 5 views
2

Sharepoint의 사용자 지정 디렉토리를 통해 1 개월 이상 된 모든 폴더를 찾아 일부 로컬 하드 드라이브로 복사하는 간단한 프로그램을 만들어야합니다. 은 아마 .......수정 한 날짜까지 Sharepoint에서 폴더 복사

감사 야쿱

나는 당신이 그것을 할 수있는 방법을 이해하는 데 사용할 수있는이 샘플 코드를 작성
+0

안녕하세요, 그것은 셰어 포인트 2007, windows authetication를 사용하고 나는 아무것도 없다 :) 나는 셰어 액세스에 아무 문제가 없다고 생각하고, 나는 옛날 폴더를 찾아야 할 것입니다. 나는 그들을 복사하는 것이 가장 쉬운 부분이라고 생각하지만,이 모든 일을 도와 주시면 감사하겠습니다. –

답변

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 폴더 구조를 저장합니다. 매우 복잡한 폴더 구조를 가진 라이브러리에서 StackOverflowException이 발생할 수 있으므로 재귀 MoveFolders 메서드를 사용할 때는주의하십시오.

+0

고맙습니다. 이런 초보자가되어서 미안하지만 사용자가 버튼을 클릭하여 설명 된대로 작업을 수행하는 방식으로 작동시키는 법을 모릅니다. 또한 "your_web_url"및 "your_doclib_url"이 무엇인지 확실하지 않습니다. 그런 초보자 인 것에 대해 유감스럽게 생각합니다. 그러나 나는 존재하지 않으려 고합니다. –

+0

사이트 URL은 htt_p : // your_sharepoint_server_name과 비슷합니다. Doclib url은 대개 문서 라이브러리의 이름입니다. 이 작업을 수행 할 공유 지점 사이트의 단추를 원할 경우 (SPSite = new SPSite (..)) 대신 SPContext.Current.Site를 사용할 수 있습니다. 이 코드를 버튼의 onclick 이벤트에 놓고 문서 라이브러리 이름을 설정하면됩니다. 여전히 명확하지 않은 경우 질문하십시오. – EvgK

관련 문제