簡體   English   中英

使用C#訪問OneDrive For Business(Office365) - 無法列出子文件夾

[英]Using C# to access OneDrive For Business (Office365) - Can't list subfolders

為了備份目的(因為用戶很不小心刪除了他們不應該做的事情)我正在嘗試編寫一些軟件來將公司用戶“One Drives”的內容下載到公司網絡,以便我們可以備份它們,以防萬一他們刪除任何東西

我目前正在使用Microsoft.SharePoint.Client這樣做。 我也覺得OneDrive For Business與OneDrive的不同之處(它與Sharepoint的糾纏)相差甚遠。

例如......如果我的OneDrive網址是https://accountname-my.sharepoint.com/personal/firstname_lastname_mycompany_com/Documents/

我可以成功列出文檔根目錄中的所有文件夾,並下載Documents文件夾根目錄中的所有文件。

這是列出文檔中文件夾的示例。

public void Listfiles()
{
    var folders = ListFolders(dirPath, clientContext, web);
    // now do something with results contained in 'folders'
}

public List GetDocumentLibrary(string libraryName, ClientContext clientContext, Web web)
{
    var query = clientContext.LoadQuery(web.Lists.Where(p => p.Title == libraryName));
    clientContext.ExecuteQuery();
    return query.FirstOrDefault();
}

public List<Folder> ListFolders(string libraryName, ClientContext clientContext, Web web)
{
    var list = GetDocumentLibrary(libraryName, clientContext, web);
    var folders = list.RootFolder.Folders;
    clientContext.Load(folders);
    clientContext.ExecuteQuery();
    return folders.ToList();
}

此代碼適用於返回Documents文件夾中的文件夾列表,但是,我的問題是嘗試列出其中一個文件夾的內容。

例如https://accountname-my.sharepoint.com/personal/firstname_lastname_mycompany_com/Documents/PurchaseRequests/

如果我嘗試運行上面相同的代碼,這次我會拋出以下異常。

An unhandled exception of type 'Microsoft.SharePoint.Client.ClientRequestException'      occurred in Microsoft.SharePoint.Client.dll

Additional information: Cannot contact site at the specified URL 
https://accountname-my.sharepoint.com/personal/firstname_lastname_mycompany_com/Documents. 
There is no Web named "/personal/firstname_lastname_mycompany_com/Documents/_vti_bin/sites.asmx"

這是在GetDocumentLibrary()中的ExecuteQuery()語句中發生的,我不明白為什么它沒有返回任何結果,因為我已經將clientcontext和web更改為指向要查詢的新URL而不是指向的在文件。

有沒有人知道它為什么要尋找/_vti_bin/sites.asmx,如果有的話,是否有人對我出錯的地方有任何建議?

我是以正確的方式來做這件事的嗎? 對於Sharepoint / OneDrive For Business中的子文件夾,我有什么遺漏嗎? 這是微軟的一些奇怪嗎?

非常感謝

Dougie

您收到該錯誤是因為您必須將Url傳遞到OneDrive for Business文檔庫,而不是將Url傳遞到OneDrive for Business網站。

你可能正在這樣做:

new ClientContext("https://accountname-my.sharepoint.com/personal/firstname_lastname_mycompany_com/Documents/")

當你應該這樣做:

new ClientContext("https://accountname-my.sharepoint.com/personal/firstname_lastname_mycompany_com/")

請注意,Url的“文檔”部分是文檔庫而不是站點。 您必須將站點Url傳遞給新的ClientContext()。 這就是你得到錯誤的原因。

要列出所有文件夾,您需要進行一些遞歸或類似操作。 獲得根文件夾的初始列表后,對於該列表中的每個文件夾執行以下操作:

clientContext.Load(folder.Folders);
clientContext.ExecuteQuery();

然后為每個返回的文件夾執行相同的操作,直到您擁有完整的文件夾列表。

暫無
暫無

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

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