private void FolderComparator() { // string nameFileA; // string sizeFileA; FileAttrib fA = new FileAttrib(); // запускаем поиск файлов расположенных в текущем каталоге. с учетом подкаталогов. string[] allfilesA = Directory.GetFiles(filesPathCompilling, "*.*", SearchOption.AllDirectories); FilesWork.Clear(); FilesCompiling.Clear(); // возникает ошибка при индексировании. // Нужно проводить индексирование файлов в каждома каталоге // Добавлять в каталог файл сразу при получении его имени. // При ошибке доступа к каталогу выводить соответствующее исключение. // выводить разрешение файла for (int indexA = 0; indexA < allfilesA.Length; indexA++) { fA.fileName = Path.GetFileName(allfilesA[indexA]); System.IO.FileInfo fi = new FileInfo(allfilesA[indexA]); fA.fileSize = fi.Length; // добавляем файлы в массив. string strEx = Path.GetExtension(allfilesA[indexA]); if (strEx != ".cs") { FilesCompiling.Add(fA); } } string[] allfilesB = Directory.GetFiles(filesPathWork, "*.*", SearchOption.AllDirectories); for (int indexB = 0; indexB < allfilesB.Length; indexB++)// foreach (string filename in allfilesB) { fA.fileName = Path.GetFileName(allfilesB[indexB]); System.IO.FileInfo fi = new FileInfo(allfilesB[indexB]); fA.fileSize = fi.Length;// (allfilesB[indexB]).Length; //attributes. File.filу (allfilesB[indexB]);//. e.GetAttributes.Si System.IO. // добавляем файлы в массив. if (Path.GetExtension(allfilesB[indexB]) != ".cs") { FilesWork.Add(fA); } } long index = 0; for (int indexB = 0; indexB < FilesWork.Count; indexB++) { for (int indexA = 0; indexA < FilesCompiling.Count; indexA++) { if (FilesCompiling[indexA].fileName == FilesWork[indexB].fileName) { if (FilesCompiling[indexA].fileSize != FilesWork[indexB].fileSize) { index++; fA.fileName = FilesWork[indexB].fileName; fA.fileSize = FilesWork[indexB].fileSize; fA.description = (FilesWork[indexB].fileSize - FilesCompiling[indexA].fileSize).ToString(); FilesWork[indexB] = fA; tbLog.AppendText(index.ToString() + " " + FilesWork[indexB].fileName + "\t" + FilesWork[indexB].description + "\r\n"); // dGvFileList[3, dGvFileList.Rows.Count - 1].Value = ; } else { fA.description = "==="; // (FilesWork[indexB].fileSize - FilesCompiling[indexA].fileSize).ToString(); fA.fileName = FilesWork[indexB].fileName; fA.fileSize = FilesWork[indexB].fileSize; FilesWork[indexB] = fA; } continue; } } } int matches = 0; for (int indexB = 0; indexB < FilesWork.Count; indexB++) { matches = 0; for (int indexA = 0; indexA < FilesCompiling.Count; indexA++) { if (FilesCompiling[indexA].fileName == FilesWork[indexB].fileName) { matches++; } } if (matches == 0) { index++; fA.description = "P---"; fA.fileName = FilesWork[indexB].fileName; fA.fileSize = FilesWork[indexB].fileSize; FilesWork[indexB] = fA; tbLog.AppendText(index.ToString() + " " + FilesWork[indexB].fileName + "\t" + FilesWork[indexB].description + "\r\n"); } } // label1.Text = "Вывод результата"; }
public List <FileAttrib> ScanForFiles(DirectoryInfo rootDirectoryInfo, IEnumerable <string> filters) { var filesList = new List <FileAttrib>(); var listOfFilters = filters as IList <string> ?? filters.ToList(); ReportProgress(0, new Tuple <string, string>("false", "Searching Directory " + rootDirectoryInfo.FullName)); Thread.Sleep(50); foreach (var filter in listOfFilters) { try { var files = rootDirectoryInfo.GetFiles(filter, SearchOption.TopDirectoryOnly); foreach (var file in files) { try { filesList.Add(FileAttrib.GetFileInfo(file)); } catch (PathTooLongException) { /*255 item range is too long*/ } } } catch (UnauthorizedAccessException) { /*Admin Access*/ } catch (SecurityException) { /*you don't have the permission of viewing this files*/ } catch (DirectoryNotFoundException) { /*directory not found*/ } catch (ArgumentNullException) { /*bad parameters*/ } } try { var directories = rootDirectoryInfo.GetDirectories(); foreach (var directory in directories) { try { filesList.AddRange(ScanForFiles(directory, listOfFilters)); } catch (PathTooLongException) { //continue the foreach } } } catch (UnauthorizedAccessException) { } catch (DirectoryNotFoundException) { /*directory not found*/ return(filesList); } return(filesList); }