четверг, 27 мая 2010 г.

SharePoint 2010 CSOM: File not found or File already exists

Столкнулся с забавной ситуацией.
Предположим что мы хотим залить файл в определенный фолдер на сервере и используем ф-ю SaveBinaryDirect.
Но фолдера такого на сервере еще нет. Как думаете какая будет ошибка? Правильно - "{"The file already exists."}" :)

Вот примерчик:
using (var clientContext = new ClientContext(@"http://server"))
{
 var FileSrvRelUrl = "/notexsist/notexsist/blabla.txt";
 using (var fileStream = new MemoryStream(new byte[100]))
 {
  Microsoft.SharePoint.Client.File.SaveBinaryDirect(clientContext, FileSrvRelUrl, fileStream, false);
 }
}

Глупо, не логично, но это так...

При этом ф-я GetFileByServerRelativeUrl с тем же url честно выдает {"File Not Found."}.
using (var clientContext = new ClientContext(@"http://server"))
{
    var FileSrvRelUrl = "/notexsist/notexsist/blabla.txt";
    var f = clientContext.Web.GetFileByServerRelativeUrl(FileSrvRelUrl);
    clientContext.Load(f);
    clientContext.ExecuteQuery();
}

Кстати, если в примере выше вместо clientContext.Load(f); написать clientContext.Load(f, fi=>fi.Exists); то исключение возникать не будет ,а поле Exists будет содержать false.

Комментариев нет: