ошибка копирования папки sharepoint, указав, что папка недействительна - PullRequest
0 голосов
/ 03 октября 2018

У меня есть следующий код, который отлично работает для Move, но не работает для копирования

// 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 (lativeDestinationFolderUrl +"/" + fileName, false);

Ошибка

Дополнительная информация: URL '/ SubSeries / DEV010 / files / dev010-007-2018 / parent/ copythisfolder 'неверен.Это может относиться к несуществующему файлу или папке или к действительному файлу или папке, которых нет в текущей сети.

Перемещение работает, но странно, что подобный код не работает длякопия.

1 Ответ

0 голосов
/ 04 октября 2018

В конце концов я использовал этот пост: 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);
    }      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...