Esempio n. 1
0
        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 = "Вывод результата";
        }
Esempio n. 2
0
        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);
        }