Переименовать файл с помощью клиентской объектной модели SharePoint?

Это может показаться глупым вопросом, но я не могу найти ответы в Google.

Я написал метод для запроса SharePoint и переименования документа на основе указанного параметра имени документа. Я использовал аналогичный метод для переименования папок, и это сработало нормально, однако, когда я пытаюсь переименовать файл, я получаю исключение ArgumentOutOfRangeException.

Вот мой код:

public bool RenameFileInDocumentLibrary(string documentName, string newDocumentName, ClientContext clientContext)
        {
            {
                bool isDocumentRenamed = false;

                string url = "MySharePointSite";

                List list = clientContext.Web.Lists.GetByTitle("MyDocLib");

                CamlQuery query = new CamlQuery();
                query.ViewXml = "<View Scope=\"RecursiveAll\"> " +
                            "<Query>" +
                                "<Where>" +
                                    "<And>" +
                                        "<Eq>" +
                                            "<FieldRef Name=\"FSObjType\" />" +
                                            "<Value Type=\"Integer\">2</Value>" +
                                         "</Eq>" +
                                          "<Eq>" +
                                            "<FieldRef Name=\"Title\"/>" +
                                            "<Value Type=\"Text\">" + documentName + "</Value>" +
                                          "</Eq>" +
                                    "</And>" +
                                 "</Where>" +
                            "</Query>" +
                            "</View>";

                var files = list.GetItems(query);

                clientContext.Load(list);
                clientContext.Load(list.Fields);
                clientContext.Load(files, fs => fs.Include(fi => fi["Title"],
                    fi => fi["DisplayName"],
                    fi => fi["FileLeafRef"]));
                clientContext.ExecuteQuery();

                if (files.Count == 0)
                {
                    files[0]["Title"] = newDocumentName;
                    files[0]["FileLeafRef"] = newDocumentName;
                    files[0].Update();
                    clientContext.ExecuteQuery();
                    isDocumentRenamed = true;
                }

                return isDocumentRenamed;
            }
        }
    }  

Любая помощь в этом будет оценена по достоинству. Спасибо!


person Josh Price    schedule 15.03.2013    source источник


Ответы (1)


Вам нужно использовать член файла ListItems:

string newPath = files[0]["FileDirRef"] + "/" + "MyNewFileName" + ".extension";
files[0].File.MoveTo(newPath, MoveOperations.Overwrite);
files[0].Update();
clientContext.ExecuteQuery();
person VB Did Nothing Wrong    schedule 05.09.2013