SharePoint Online – Browse folder from PC and upload to SharePoint Document library

Hello everybody,

Recently I got an opportunity to work on browse functionality using windows forms application.

The functionality is to select a folder from PC and upload the folder with files in it to SharePoint document library. Let’s get started!


  1. SharePoint Online Tenant.
  2. Simple window form application with only one button control on it to browse in Visual Studio IDE.


  1. Name of folder to be uploaded – Test Folder.
  2. Hierarchy of folder

Figure .1 Folder Hierarchy

Let’s see how code works:

  1. When browse button is clicked, it opens “Browse for Folder” dialog to select and upload folder from.

Figure .2 Browse folders to upload

  1. Select the source folder (Test Folder) from drive and click OK.

Figure .3 Select folder to upload

  1. As soon as OK button is clicked, code will perform its first step to connect to SharePoint site with the site url and credentials provided in app.config file.
  2. Detailed comments are provided in the code to make it easy to understand and self explanatory.
  3. Detailed code is given below.


App.Config file

<?xml version="1.0" encoding="utf-8" ?>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
<add key="SiteURL" value="Provide SP site collection url here"/>
<add key="Username" value="Provide your username here"/>
<add key="Password" value="Provide your password here"/>


using Microsoft.SharePoint.Client;
using System;
using System.Configuration;
using System.Data;
using System.IO;
using System.Linq;
using System.Security;
using System.Windows.Forms;

namespace BrowseAndUploadFiles
public partial class Form1 : System.Windows.Forms.Form
public Form1()
this.buttonBrowse.Click += new System.EventHandler(this.buttonBrowse_Click);

/// Browse button click event handler - When clicked it opens browse files dialog to select folder to upload.

//////private void buttonBrowse_Click(object sender, EventArgs e)
FolderBrowserDialog folderDialog = new FolderBrowserDialog();
folderDialog.ShowNewFolderButton = true;
DialogResult result = folderDialog.ShowDialog();
if (result == DialogResult.OK)
//textBoxFilename.Text = folderDialog.SelectedPath; //This step is not mandatory
string filename = folderDialog.SelectedPath;
Environment.SpecialFolder root = folderDialog.RootFolder;

#region Code to Connect to SharePoint site

//Read details from app.config file
string siteURL = ConfigurationManager.AppSettings["SiteURL"];
string userName = ConfigurationManager.AppSettings["UserName"];
string password = ConfigurationManager.AppSettings["Password"];

ClientContext clientContext = new ClientContext(siteURL);
SecureString securePassword = new SecureString();

//Formation of secure password string
foreach (char c in password.ToCharArray()) securePassword.AppendChar(c);

clientContext.Credentials = new SharePointOnlineCredentials(userName, securePassword);

//Load the web
Web web = clientContext.Web;


//Call to the method which uploads folders recursively to Documents library on SharePoint site
UploadFoldersRecursively(clientContext, filename, "Documents");

MessageBox.Show("File upload complete", "buttonBrowse_Click", MessageBoxButtons.OK, MessageBoxIcon.Information);
}//if (result == DialogResult.OK)
catch (Exception ex)

#region UploadFoldersRecursively
/// Method to upload folder - Selected folder on PC gets created on SP site in Document library

/////////public static void UploadFoldersRecursively(ClientContext clientContext, string sourceFolder, string destinationLibraryTitle)
//Load detination library
Web web = clientContext.Web;
var query = clientContext.LoadQuery(web.Lists.Where(p =&amp;amp;gt; p.Title == destinationLibraryTitle));
List documentsLibrary = query.FirstOrDefault();
var folder = documentsLibrary.RootFolder;
DirectoryInfo dir = new DirectoryInfo(sourceFolder);


folder = documentsLibrary.RootFolder.Folders.Add(dir.Name);

UploadFolder(clientContext, dir, folder);
catch(Exception ex)
MessageBox.Show(ex.Message, "UploadFoldersRecursively", MessageBoxButtons.OK, MessageBoxIcon.Error);
}//public static void UploadFoldersRecursively(ClientContext clientContext, string sourceFolder, string destinationLibraryTitle)

#region UploadFolder
/// Method to upload a folder - Uploads folder recursively that means if selected folder to upload contains more folders
/// in it then it uploads each and every folder and files under every folder to sharepoint site

/////////public static void UploadFolder(ClientContext clientContext, System.IO.DirectoryInfo folderInfo, Folder folder)
FileInfo[] files = null;
DirectoryInfo[] subDirs = null;

//Get all files from the folder
files = folderInfo.GetFiles("*.*");

if (files != null)
//Loop through each document and upload it separately
foreach (FileInfo file in files)
UploadDocument(clientContext, file.FullName, folder.ServerRelativeUrl + "/" + file.Name);
}//foreach (System.IO.FileInfo file in files)

subDirs = folderInfo.GetDirectories();

//Loop through each folder recursively
foreach (DirectoryInfo dirInfo in subDirs)
Folder subFolder = folder.Folders.Add(dirInfo.Name);
UploadFolder(clientContext, dirInfo, subFolder);
}//foreach (System.IO.DirectoryInfo dirInfo in subDirs)
}//if (files != null)
catch(Exception ex)
MessageBox.Show(ex.Message, "UploadFolder", MessageBoxButtons.OK, MessageBoxIcon.Error);
}//public static void UploadFolder(ClientContext clientContext, System.IO.DirectoryInfo folderInfo, Folder folder)

#region UploadDocument
/// Method to upload document in the folder

/////////public static void UploadDocument(ClientContext clientContext, string sourceFilePath, string serverRelativeDestinationPath)
using (var fs = new FileStream(sourceFilePath, FileMode.Open))
var file = new FileInfo(sourceFilePath);
//Upload each document to the destination folder
Microsoft.SharePoint.Client.File.SaveBinaryDirect(clientContext, serverRelativeDestinationPath, fs, true);
}//using (var fs = new FileStream(sourceFilePath, FileMode.Open))
catch (Exception ex)
MessageBox.Show(ex.Message, "UploadDocument", MessageBoxButtons.OK, MessageBoxIcon.Error);
}//UploadDocument(ClientContext clientContext, string sourceFilePath, string serverRelativeDestinationPath)

}//namespace BrowseAndUploadFiles
}//public partial class Form1 : System.Windows.Forms.Form



Thanks for reading 🙂

Keep reading, share your thoughts, experiences. Feel free to contact us to discuss more. If you have any suggestion / feedback / doubt, you are most welcome.

Stay tuned on Knowledge-Junction, will come up with more such articles.


You may also like...

2 Responses

  1. Manoj Sutar says:


  1. October 23, 2018

    […] In my last blog, we saw how to browse files from PC and upload it to SharePoint document library, check it here. […]

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: