Code to search files with particular extension in SharePoint's Web Application
Requirement:
To search files with particular extension [here *.doc as example].
Here to achieve the above requirement I used SharePoint's Object Model.
I downloaded those searched files to a particular folder.
Beside printing the searched files result in console and I am also logging it in a Log file.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.SharePoint; using System.IO; using System.Collections; namespace SearchFile { class Program { static void Main(string[] args) { //Get folder path string directoryPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) , "MyFolder"); //Create directory if it not exist if (!(Directory.Exists(directoryPath))) Directory.CreateDirectory(directoryPath); //SPFile myFile = null; byte[] binFile; string filename = string.Empty; FileStream fs = null; BinaryWriter bw = null; SPDocumentLibrary library = null; string fileExtension = ".doc"; string siteURL = "http://[server-name]:[port-number]"; StringBuilder filesLog = new StringBuilder(); using (SPSite site = new SPSite(siteURL)) { foreach (SPWeb web in site.AllWebs) { foreach (SPList list in web.Lists) { if (list.BaseType == SPBaseType.DocumentLibrary) { library = (SPDocumentLibrary)list; SPFolder folder = library.RootFolder; ArrayList foldersList = new ArrayList(); foldersList.Add(folder); foldersList = getFolders(folder, foldersList); //foreach (SPListItem oListItem in library.Items) foreach (SPFolder fold in foldersList) { foreach (SPFile myFile in fold.Files) { //Download file in file system //myFile = oListItem.File; if (myFile.Name.EndsWith(fileExtension, StringComparison.InvariantCultureIgnoreCase)) { binFile = myFile.OpenBinary(); //Generate file name //filename = Path.Combine(directoryPath, myFile.Name); filename = Path.Combine(directoryPath, myFile.Url.Replace("/", "_")); //Do file write operation fs = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite); bw = new BinaryWriter(fs); bw.Write(binFile); bw.Close(); filesLog.Append(string.Concat(web.Url, "/", myFile.Url, ",")); Console.WriteLine(string.Concat(web.Url, "/", myFile.Url)); }//End file extension check }//End All SPFiles }//End All SPFolders }//End check DocumentLibrary }//End All Lists }//End AllWebs }//End SPSite string[] lines = filesLog.ToString().Split(new char[] { ',' }); System.IO.File.WriteAllLines(directoryPath + "/LOG_List.txt", lines); Console.WriteLine("Press any key to Exit..."); Console.ReadLine(); } //Recursive function to get all nested SPFolders static ArrayList getFolders(SPFolder folder, ArrayList foldersList) { foreach (SPFolder subfolder in folder.SubFolders) { foldersList.Add(subfolder); foldersList = getFolders(subfolder, foldersList); } return foldersList; } } }