簡體   English   中英

SharePoint 2016 FileNotFound 異常

[英]SharePoint 2016 FileNotFound Exception

通過 C#,我嘗試從 SharePoint (SharePoint 2016) 下載文件。 下面是我正在使用的代碼:

        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()”時,拋出異常:

ExceptionMessage: File not found
at Microsoft.SharePoint.Client.ClientRequest.ProcessResponseStream

但是,該路徑中有文件,我們可以使用相同的憑據手動上傳和下載。 URL、路徑等已經過雙重檢查,沒有問題。 當我打印“folder.ItemCount”時,它正在打印正確的編號。 文件夾中的文件。 只有在 ExecuteQuery 加載文件時,才會拋出異常。

構建設置:.NET framework 4.5 和 x64

在其他帖子中,人們建議更改為 .NET 3.5,但它適用於 SharePoint 2010。此外,將其更改為 3.5 最終會導致很多構建錯誤。

請幫助解決這個問題。

以下是從 SharePoint 默認文檔庫下載文件並將其保存到本地文件夾的代碼片段:

 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);
            }
        }

在此處輸入圖片說明

在此處輸入圖片說明

在此處輸入圖片說明

在此處輸入圖片說明

我正在收集和上述解決方案對我不起作用,這是我的工作方式,以便它可以幫助某人。

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);                               
            }

        }

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM