/// <summary> /// Read a single file /// </summary> /// <param name="FilesList"></param> /// <param name="directory"></param> /// <param name="FileNumberID"></param> /// <param name="startDate"></param> /// <param name="endDate"></param> /// <param name="percentIncrease"></param> /// <param name="dateType"></param> /// <param name="lookForDates"></param> /// <param name="directoryLoadPercentage"></param> /// <param name="GenerateMD5"></param> /// <param name="getConents"></param> /// <param name="IncludeExtensions"></param> /// <param name="ExcludeExtensions"></param> /// <param name="fileSizeStart"></param> /// <param name="fileSizeEnd"></param> /// <param name="FileSizeType"></param> /// <param name="flash"></param> /// <returns></returns> public ListOfFiles <FileStructure> getFile( ListOfFiles <FileStructure> FilesList, string directory, ref long FileNumberID, DateTime startDate, DateTime endDate, ref float percentIncrease, int dateType = -1, bool lookForDates = false, float directoryLoadPercentage = 0, bool GenerateMD5 = false, bool getConents = false, string[] IncludeExtensions = null, string[] ExcludeExtensions = null, int fileSizeStart = -1, int fileSizeEnd = -1, int FileSizeType = -1 ) { //decimal progressPercent = 100 / (decimal)directories.Count; // per folder percentage //decimal percentIncrease = 0; //directories // .AsParallel() // .WithDegreeOfParallelism(20) // .ForAll(directory => { // //counting all files number // filesCount += Directory.GetFiles(directory).Count(); // }); EncryptionGenerate md5 = null; if (GenerateMD5) { md5 = new EncryptionGenerate(); } var files = Directory.GetFiles(directory).ToArray(); //FolderLocation folderlocation = new FolderLocation() { // Location = directory, // Dated = DateTime.Now //}; //Thread.Sleep(2000); // adding folder location entity object to the ORM model //db.FolderLocations.AddObject(folderlocation); // Save& committing Database Changes //db.SaveChanges(); // running it parallel long count = files.Count(); bool doNotContinue = false; float progressPercent2 = 0; if (count == 0) { count = 1; doNotContinue = true; } if (directoryLoadPercentage == 0) { progressPercent2 = count / 100F; } else { progressPercent2 = directoryLoadPercentage / count; } //float percentIncrease2 = percentIncrease; //long FileID = FileNumberID; if (!doNotContinue) { //files.AsParallel().ForAll(file => { foreach (var file in files) { bool addFile = false; FileInfo fileinfo = new FileInfo(file); FileStructure filestr = new FileStructure() { ID = ++FileNumberID, ExactLocation = fileinfo.FullName, FileName = fileinfo.Name, Folder = directory, CreatedDate = fileinfo.CreationTime, ModifiedDate = fileinfo.LastWriteTime, LastAccessDate = fileinfo.LastAccessTime, SizeBytes = fileinfo.Length }; if (filestr.FileName.IndexOf('.') > -1) { filestr.Extension = fileinfo.Extension.Remove(0, 1); } if (FileSizeType != -1) { if (filestr.SizeBytes >= fileSizeStart && filestr.SizeBytes <= fileSizeEnd) { addFile = true; //only if size meets the condition then add the file. } } else { addFile = true; //no size limit } if (GenerateMD5) { filestr.MD5 = md5.GetMD5FromFile(file); } if (getConents) { filestr.Content = ReadFile(file, filestr.SizeBytes); FilesList.IsSavingNecessary = true; if (filestr.IsContentEmpty) { } } if (filestr != null) { FilesList.Add(filestr); } if (addFile) { //if found by the size } percentIncrease += progressPercent2; Flash.setProgress(percentIncrease); } ; //files //progressbar.Value += 1; if (FilesList.FolderAlreadyRead == null) { FilesList.FolderAlreadyRead = new List <string>(); } //after reading the directory. if (!FilesList.FolderAlreadyRead.Exists(n => n == directory)) { //if not exist then add FilesList.FolderAlreadyRead.Add(directory); } } //need to learn how to send type of type as list to remove the null if (directoryLoadPercentage == 0) { Flash.setProgress(0); } //FileNumberID = FileID; //percentIncrease = percentIncrease2; return(FilesList); }
/// <summary> /// Read all files from a directory list /// </summary> /// <param name="FilesList"></param> /// <param name="directories"></param> /// <param name="GenerateMD5"></param> /// <param name="getConents"></param> /// <param name="Extensions"></param> /// <param name="fileSizeStart"></param> /// <param name="fileSizeEnd"></param> /// <param name="FileSizeType"></param> /// <param name="flash"></param> /// <returns></returns> public ListOfFiles <FileStructure> getFiles( ListOfFiles <FileStructure> FilesList, List <string> directories, DateTime startDate, DateTime endDate, int dateType = -1, bool lookForDates = false, bool GenerateMD5 = false, bool getConents = false, string IncludeExtensions = "", string ExcludeExtensions = "", int fileSizeStart = -1, int fileSizeEnd = -1, int FileSizeType = -1) { EncryptionGenerate md5 = new EncryptionGenerate(); if (FileSizeType == FileSizeTypeStructure.KB) { fileSizeStart = fileSizeStart * (int)FileSizeTypeStructure.KB_1; fileSizeEnd = fileSizeEnd * (int)FileSizeTypeStructure.KB_1; } else if (FileSizeType == FileSizeTypeStructure.MB) { fileSizeStart = fileSizeStart * (int)FileSizeTypeStructure.MB_1; fileSizeEnd = fileSizeEnd * (int)FileSizeTypeStructure.MB_1; } else if (FileSizeType == FileSizeTypeStructure.GB) { fileSizeStart = fileSizeStart * (int)FileSizeTypeStructure.GB_1; fileSizeEnd = fileSizeEnd * (int)FileSizeTypeStructure.GB_1; } else { fileSizeStart = -1; fileSizeEnd = -1; FileSizeType = -1; } if (directories.Count == 0) { return(FilesList); } int CountDirectories = directories.Count; float progressPercent = 100F / CountDirectories; // per folder percentage float percentIncrease = 0; //List of extensions string[] IncludeExtList = null; string[] ExcludeExtList = null; if (!String.IsNullOrWhiteSpace(IncludeExtensions)) { IncludeExtList = IncludeExtensions.Split(','); } if (!String.IsNullOrWhiteSpace(ExcludeExtensions)) { ExcludeExtList = ExcludeExtensions.Split(','); } long FileNumberID = 0; //int threadCount = 0; //Thread[] threads; //new Thread[CountDirectories]; directories.AsParallel().ForAll(directory => { //new Thread(() => { FilesList = getFile(FilesList, directory, ref FileNumberID, startDate, endDate, ref percentIncrease, dateType, lookForDates, progressPercent, GenerateMD5, getConents, IncludeExtList, ExcludeExtList, fileSizeStart, fileSizeEnd, FileSizeType ); //}).Start(); });//directory //need to learn how to send type of type as list to remove the null //foreach (var tr in threads) { // tr.Join(); //} Flash.setProgress(0); return(FilesList); }