/// <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> /// Returns all nested directories including the given one with searched results. O(n = all the nested directories) /// </summary> /// <param name="directory"></param> /// <returns></returns> public List <string> getNestedDirectories2( string directory, ref long FileNumberID, ref float percentIncrease, DateTime startDate, DateTime endDate, int dateType = -1, bool getContents = false, int FileSizeType = -1, long fileSizeStart = -1, long fileSizeEnd = -1, bool lookForDate = false) { //if directory not exist or null return the existing list; if (!Directory.Exists(directory.ToLower()) || String.IsNullOrEmpty(directory)) { return(directories); } 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; } directory = directory.ToLower(); directories.Add(directory); // add current directory if (FilesList.FolderAlreadyRead == null) { FilesList.FolderAlreadyRead = new List <string>(); } FilesList.FolderAlreadyRead.Add(directory); new Thread(() => { if (IsMatchInText(directory, FilesList)) { Flash.addListItem("(Directory) : " + directory, directory); } }).Start(); #region Files Read in a directory var files = Directory.GetFiles(directory).ToArray(); long count = files.Count(); bool doNotContinue = false; float progressPercent2 = 0; float directoryLoadPercentage = 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.AsEnu(file => { foreach (var file in files) { //new Thread(() => { FileInfo fileinfo = null; FileStructure filestr = null; fileinfo = new FileInfo(file); filestr = new FileStructure() { ID = ++FileID, ExactLocation = fileinfo.FullName, FileName = fileinfo.Name, Folder = directory, Extension = fileinfo.Extension, CreatedDate = fileinfo.CreationTime, ModifiedDate = fileinfo.LastWriteTime, LastAccessDate = fileinfo.LastAccessTime, SizeBytes = fileinfo.Length }; if (filestr != null) { FilesList.Add(filestr); } if (filestr.FileName == "Technology_2_2.txt") { var found = true; } //new Thread(() => { if (!String.IsNullOrWhiteSpace(fileinfo.Extension) && filestr.Extension.IndexOf('.') > -1) { filestr.Extension = filestr.Extension.Remove(0, 1); } var isExtensionExist = false; if (InludingExtensionList != null) { isExtensionExist = this.InludingExtensionList.Any(n => n == filestr.Extension); } var isDisableExtensionExist = false; if (ExcludingExtensionList != null) { isDisableExtensionExist = this.ExcludingExtensionList.Any(n => n == filestr.Extension); } bool addFile = false; bool isExtensionRight = false; bool isSizeRight = false; bool isDateRight = false; if (isExtensionExist && !isDisableExtensionExist) { isExtensionRight = true; } if (FileSizeType != FileSizeTypeStructure.NoLimit) { if (filestr.SizeBytes >= fileSizeStart && filestr.SizeBytes <= fileSizeEnd) { isSizeRight = true; //only if size meets the condition then add the file. } } else { isSizeRight = true; //no size limit } if (lookForDate) { if (dateType == DateTypeStructure.Modified_Date) { DateTime dt = filestr.ModifiedDate.Date; if (dt != null && (dt >= startDate.Date && dt <= endDate.Date)) { isDateRight = true; } } else if (dateType == DateTypeStructure.Created_Date) { DateTime dt = filestr.CreatedDate.Date; if (dt != null && (dt >= startDate.Date && dt <= endDate.Date)) { isDateRight = true; } } else if (dateType == DateTypeStructure.Access_Date) { DateTime dt = filestr.LastAccessDate.Date; if (dt != null && (dt >= startDate.Date && dt <= endDate.Date)) { isDateRight = true; } } } else { isDateRight = true; } if (isSizeRight && isDateRight && isExtensionRight) { addFile = true; } if (addFile) { filestr.Content = ReadFile(file, filestr.SizeBytes); if (filestr.IsContentEmpty) { } } if (addFile) { //if found by the size new Thread(() => { if (IsMatchInText(filestr.FileName, FilesList)) { Flash.addListItem(filestr.FileName, file); } else if (getContents && !filestr.IsContentEmpty && IsMatchInText(filestr.Content, FilesList)) { Flash.addListItem(filestr.FileName, file); } else if (getContents && filestr.SizeBytes <= FileSizeTypeStructure.MB_1 * 3) { filestr.Content = this.ReadFile(filestr.ExactLocation, filestr.SizeBytes); if (filestr.IsContentEmpty) { } FilesList.IsSavingNecessary = true; } }).Start(); } //}).Start(); //percentIncrease2 += progressPercent2; //Flash.setProgress(percentIncrease2); //}).Start(); } //files } FileNumberID = FileID; percentIncrease = percentIncrease2; //need to learn how to send type of type as list to remove the null if (directoryLoadPercentage == 0) { Flash.setProgress(0); } #endregion try { string[] tempDirectories = Directory.GetDirectories(directory); //parallel operation foreach (var dir in tempDirectories) { directories = getNestedDirectories2( dir, ref FileNumberID, ref percentIncrease, startDate, endDate, dateType, getContents, FileSizeType, fileSizeStart, fileSizeEnd, lookForDate); } } catch (Exception ex) { ExceptionHandle.Handle(ex); } return(directories); }