【问题标题】:copy sharepoint folder error stating folder is invalid复制共享点文件夹错误,说明文件夹无效
【发布时间】:2018-10-03 10:43:06
【问题描述】:

我有以下代码适用于移动,但不适用于复制

// relativeSourceFolderUrl = "/SubSeries/DEV010/files/dev010-007-2018/parent/copyThisFolder"
// relativeDestinationFolderUrl= "/SubSeries/DEV010/files/dev010-007-2018/parent/child"
// fileName = "copyThisFoler"
// moveItem = false

public Folder MoveOrCopyFolder(String relativeSourceFolderUrl, String relativeDestinationFolderUrl, String fileName, bool moveItem)
{
    Folder folder = ClientContext.Web.GetFolderByServerRelativeUrl(relativeDestinationFolderUrl);

    // Check if file or folder exists and alter name

    fileName = CheckFileOrFolderExistsInFolder(fileName, folder, false);
    // In this case the function returns a fileName of "copyThisFolder"
    var file = ClientContext.Web.GetFileByServerRelativeUrl(relativeSourceFolderUrl);
    ClientContext.Load(file.ListItemAllFields);
    ClientContext.ExecuteQuery();
    if (moveItem)
        file.MoveTo(relativeDestinationFolderUrl + "/" + fileName, MoveOperations.None);
    else
        file.CopyTo(relativeDestinationFolderUrl + "/" + fileName, false);

    ClientContext.ExecuteQuery();            

    return null;
}

这条线断了

file.CopyTo(relativeDestinationFolderUrl + "/" + fileName, false);

错误是

附加信息:URL '/SubSeries/DEV010/files/dev010-007-2018/parent/copythisfolder' 无效。它可能引用一个不存在的文件或文件夹,或者引用一个不在当前 Web 中的有效文件或文件夹。

Move 有效,但奇怪的是类似的代码不适用于复制。

【问题讨论】:

    标签: c# sharepoint


    【解决方案1】:

    最后我使用了这个帖子: https://sharepoint.stackexchange.com/questions/97471/copy-all-items-in-a-folder-to-another-location/250233?noredirect=1#comment266907_250233

    这让我找到了这个解决方案:

    public void CopyFiles(string listTitle, string srcRelativeSource, string destRelativeSource)
        {
            var srcList = ClientContext.Web.Lists.GetByTitle(listTitle);
            var qry = CamlQuery.CreateAllItemsQuery();
            qry.FolderServerRelativeUrl = string.Format("/{0}", srcRelativeSource);
            var srcItems = srcList.GetItems(qry);
            ClientContext.Load(srcItems, icol => icol.Include(i => i.FileSystemObjectType, i => i["FileRef"], i => i.File));
            ClientContext.ExecuteQuery();
    
            createThisFolder(destRelativeSource);
    
            foreach (var item in srcItems)
            {
                switch (item.FileSystemObjectType)
                {
                    case FileSystemObjectType.Folder:
                        var destFolderUrl = ((string)item["FileRef"]).ToLower().Replace(srcRelativeSource, destRelativeSource);
                        createThisFolder(destFolderUrl);
                        break;
                    case FileSystemObjectType.File:
                        var destFileUrl = item.File.ServerRelativeUrl.ToLower().Replace(srcRelativeSource, destRelativeSource);
                        item.File.CopyTo(destFileUrl, true);
                        ClientContext.ExecuteQuery();
                        break;
                }
            }
        }
    
        private void createThisFolder(string destFolderUrl)
        {
            //change destFolderUrl into absolute url
            Uri u = new Uri(ClientContext.Web.Context.Url);
    
            //remove the string after the last slash
            int idx = destFolderUrl.LastIndexOf('/');
            string path = destFolderUrl.Substring(0, idx);
            string lastFolder = destFolderUrl.Split('/').Last();
    
            string filtered = (path.StartsWith("/")) ? path.Substring(1) : path;
    
            string url = u.GetLeftPart(UriPartial.Authority) + "/" + filtered;
            CreateFolder(url, lastFolder);
        }      
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 2016-08-04
      • 2020-01-02
      • 2020-05-22
      • 2022-06-30
      • 1970-01-01
      • 2020-09-14
      相关资源
      最近更新 更多