如何从SharePoint文档版本历史下载全部文件?含界面/C#方案需求
Hey there! Let's walk through how to download all version history documents from SharePoint—whether you want to use the UI or write C# code. I'll also touch on common issues that might have caused your API URL call to fail.
If you prefer clicking through the interface instead of coding, here's how to grab all versions at once:
- Locate your target file, right-click it or click the three-dot "More options" icon on the file card.
- Select the Version history option to open the version panel.
- Hold down the Ctrl key to select all the versions you need (use Ctrl+A to select every version in the list).
- Right-click any of the selected versions and choose Download—all selected versions will save to your default download folder.
方法二:使用C#代码批量下载版本历史
If you need an automated solution, using SharePoint CSOM (Client Side Object Model) is a reliable approach. First, make sure you install the NuGet package Microsoft.SharePointOnline.CSOM in your project.
Here's a complete example:
using Microsoft.SharePoint.Client; using System; using System.IO; using System.Security; class SharePointVersionDownloader { static void Main(string[] args) { // Replace these with your actual SharePoint details string siteUrl = "https://your-tenant.sharepoint.com/sites/YourSite"; string username = "your-email@tenant.onmicrosoft.com"; string password = "your-password-or-app-specific-password"; string serverRelativeFilePath = "/sites/YourSite/Shared Documents/YourTargetFile.docx"; string localDownloadFolder = @"C:\SharePointVersionDownloads"; // Create download folder if it doesn't exist if (!Directory.Exists(localDownloadFolder)) { Directory.CreateDirectory(localDownloadFolder); } // Initialize SharePoint client context using (ClientContext ctx = new ClientContext(siteUrl)) { // Set up credentials SecureString securePwd = new SecureString(); foreach (char c in password) securePwd.AppendChar(c); ctx.Credentials = new SharePointOnlineCredentials(username, securePwd); try { // Get the target file File targetFile = ctx.Web.GetFileByServerRelativeUrl(serverRelativeFilePath); ctx.Load(targetFile); ctx.ExecuteQuery(); // Fetch all versions of the file FileVersionCollection fileVersions = targetFile.Versions; ctx.Load(fileVersions); ctx.ExecuteQuery(); // Download each version foreach (FileVersion version in fileVersions) { // Get the version's binary content FileInformation versionFileInfo = File.OpenBinaryDirect(ctx, version.Url); // Create a unique filename with version label and timestamp string versionFileName = $"YourFile_v{version.VersionLabel}_{version.Created:yyyyMMddHHmmss}.docx"; string savePath = Path.Combine(localDownloadFolder, versionFileName); // Save the file to local disk using (FileStream fs = new FileStream(savePath, FileMode.Create)) { versionFileInfo.Stream.CopyTo(fs); } Console.WriteLine($"Successfully downloaded version {version.VersionLabel} to {savePath}"); } } catch (Exception ex) { Console.WriteLine($"Error during download: {ex.Message}"); Console.WriteLine($"Stack trace: {ex.StackTrace}"); } } } }
Common API Pitfalls to Avoid
If your manual API URL call failed, here are the most likely reasons:
- Incorrect URL format: SharePoint version files are stored in a hidden
_vti_historylibrary, and the numeric prefix (like512) varies by site. Using CSOM or Graph API avoids having to manually construct this URL. - Insufficient permissions: You need at least Edit permissions on the file/site to access version history.
- Modern vs. Classic site differences: Some older API endpoints don't work with modern SharePoint sites—stick to CSOM or Graph API for better compatibility.
内容的提问来源于stack exchange,提问作者Munavvar Husein Shaikh
相关产品推荐
相关产品推荐

