Search code examples
sharepointsharepoint-2010

Downloading bulk files from sharepoint library


I want to download the files from a sharepoint document library through code as there are thousand of files in the document library.

I am thinking of creating console application, which I will run on sharepoint server and download files. Is this approach correct or, there is some other efficient way to do this.

Any help with code will be highly appreciated.


Solution

  • Like SigarDave said, it's perfectly possible to achieve this without writing a single line of code. But if you really want to code the solution for this, it's something like:

    static void Main(string[] args)
    {
      // Change to the URL of your site
      using (var site = new SPSite("http://MySite")) 
      using (var web = site.OpenWeb())
      {
        var list = web.Lists["MyDocumentLibrary"]; // Get the library
        foreach (SPListItem item in list.Items)
        {
          if (item.File != null)
          {
            // Concat strings to get the absolute URL
            // to pass to an WebClient object.
            var fileUrl = string.Format("{0}/{1}", site.Url, item.File.Url);            
            var result = DownloadFile(fileUrl, "C:\\FilesFromMyLibrary\\", item.File.Name);
            Console.WriteLine(result ? "Downloaded \"{0}\"" : "Error on \"{0}\"", item.File.Name);
          }
        }
      }
      Console.ReadKey();
    }
    
    private static bool DownloadFile(string url, string dest, string fileName)
    {
      var client = new WebClient();
    
      // Change the credentials to the user that has the necessary permissions on the 
      // library
      client.Credentials = new NetworkCredential("Username", "Password", "Domain"); 
      var bytes = client.DownloadData(url);
    
      try
      {
        using (var file = File.Create(dest + fileName))
        {
          file.Write(bytes, 0, bytes.Length); // Write file to disk
          return true;
        }
      }
      catch (Exception)
      {
        return false;
      }
    }