문제

C # 코드를 통해 SharePoint에서 중첩 된 폴더를 만드는 방법은 무엇입니까? 예를 들어, "공유 문서 / folder1 / folder2 / folder3"과 같은 문자열이 있고 C # 코드를 통해 폴더가 이미 존재하는 경우 해당 폴더를 만들거나 건너 뛸 것입니다.어떤 제안이나 코드는 높이 평가됩니다.

도움이 되었습니까?

해결책

SharePoint SSOM을 사용하여 중첩 된 폴더를 만드는 방법

internal static class SPFolderExtensions
{
    /// <summary>
    /// Ensure SPFolder
    /// </summary>
    /// <param name="web"></param>
    /// <param name="listTitle"></param>
    /// <param name="folderUrl"></param>
    /// <returns></returns>
    public static SPFolder CreateFolder(this SPWeb web, string listTitle, string folderUrl)
    {
        if (string.IsNullOrEmpty(folderUrl))
            throw new ArgumentNullException("folderUrl");
        var list = web.Lists.TryGetList(listTitle);
        return CreateFolderInternal(list, list.RootFolder, folderUrl);
    }


    private static SPFolder CreateFolderInternal(SPList list, SPFolder parentFolder, string folderUrl)
    {
        var folderNames = folderUrl.Split(new char[] {'/'}, StringSplitOptions.RemoveEmptyEntries);
        var folderName = folderNames[0];

        var curFolder =
            parentFolder.SubFolders.Cast<SPFolder>()
                        .FirstOrDefault(
                            f =>
                            System.String.Compare(f.Name, folderName, System.StringComparison.OrdinalIgnoreCase) ==
                            0);
        if (curFolder == null)
        {
            var folderItem = list.Items.Add(parentFolder.ServerRelativeUrl, SPFileSystemObjectType.Folder,
                                            folderName);
            folderItem.SystemUpdate();
            curFolder = folderItem.Folder;
        }


        if (folderNames.Length > 1)
        {
            var subFolderUrl = string.Join("/", folderNames, 1, folderNames.Length - 1);
            return CreateFolderInternal(list, curFolder, subFolderUrl);
        }
        return curFolder;
    }
}
.

키 포인트 :

  • 중첩 된 폴더를 만드는 기능
  • 기존 폴더는 영향을받지 않습니다

사용량

다음 예제에서는 Documents 라이브러리에서 다음 폴더 구조를 만드는 방법을 보여줍니다.

Orders
   |
   Orders A
      |
      Orders A1
.

예 :

var folder = web.CreateFolder("Documents", "Orders/Orders A/Orders A1");
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top