首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SharePoint 2016 FileNotFound异常

SharePoint 2016 FileNotFound异常
EN

Stack Overflow用户
提问于 2019-04-04 15:29:15
回答 2查看 1K关注 0票数 1

通过C#,我尝试从SharePoint (SharePoint 2016)下载一个文件。下面是我使用的代码:

代码语言:javascript
复制
        site = new ClientContext(url);
        //credential setting has no issues. So I am skipping it. I am using NetworkCredentials
        site.Load(web);
        site.ExecuteQuery();
        List list = web.Lists.GetByTitle("Documents");
        site.Load(list);
        site.ExecuteQuery();
        site.Load(list.RootFolder);
        site.ExecuteQuery();
        site.Load(list.RootFolder.Folders);
        site.ExecuteQuery();
        Folder folder = web.GetFolderByServerRelativeUrl(sharePointPath);
        site.Load(folder);
        site.ExecuteQuery();
        site.Load(folder.Files);
        site.ExecuteQuery();

在执行最后一个"site.ExecuteQuery()“时,抛出了一个异常:

代码语言:javascript
复制
ExceptionMessage: File not found
at Microsoft.SharePoint.Client.ClientRequest.ProcessResponseStream

但是,该路径中有文件,我们可以手动使用相同的凭据进行上传和下载。URL、路径等都经过了仔细检查,没有任何问题。当我打印"folder.ItemCount“时,它打印的是正确的no。文件夹中文件的大小。只有在加载文件的ExecuteQuery中,才会抛出异常。

构建设置:.NET Framework4.5和x64

在其他帖子中,人们建议改用.NET 3.5,但这是针对SharePoint 2010的。此外,将其更改为3.5最终会给我带来很多构建错误。

请帮助解决此问题。

EN

回答 2

Stack Overflow用户

发布于 2019-04-04 17:16:32

下面是从SharePoint默认文档库下载文件并保存到本地文件夹的代码片段:

代码语言:javascript
复制
 static void Main(string[] args)
        {
            string siteUrl = "http://sp2016/sites/dev";
            ClientContext clientContext = new ClientContext(siteUrl);
            var list = clientContext.Web.Lists.GetByTitle("Documents");
            var listItem = list.GetItemById(5);
            clientContext.Load(list);
            clientContext.Load(listItem, i => i.File);
            clientContext.ExecuteQuery();

            var fileRef = listItem.File.ServerRelativeUrl;
            var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, fileRef);
            var fileName = Path.Combine(@"C:\Test", (string)listItem.File.Name);
            using (var fileStream = System.IO.File.Create(fileName))
            {
                fileInfo.Stream.CopyTo(fileStream);
            }
        }

票数 0
EN

Stack Overflow用户

发布于 2019-12-13 00:52:51

我正在使用集合,上面的解决方案对我不起作用,下面是我是如何做的,以便它可以帮助别人。

代码语言:javascript
复制
List list = web.Lists.GetByTitle("Events");
ListItemCollection listItems = list.GetItems(cmlqry);
context.Load(listItems);               
context.ExecuteQuery();

if (listItems != null)
{
    foreach (var listItem in listItems)
    {
        Console.WriteLine("Id: {0}, Title: {1}", listItem["ID"].ToString(), listItem["Title"].ToString());

        context.Load(listItem.AttachmentFiles);
        context.ExecuteQuery();

        foreach (var file in listItem.AttachmentFiles)
        {
            Console.WriteLine("File: {0}", file.FileName);
            var fileRef = file.ServerRelativeUrl;
            var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(context, fileRef);
            var fileName = Path.Combine(@"C:\temp\Events\", String.Format("{0}_{1}", listItem.Id, file.FileName));
            using (var fileStream = System.IO.File.Create(fileName))
            {
                fileInfo.Stream.CopyTo(fileStream);                               
            }

        }

    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55510157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档