Advertisement
Guest User

ArchCompLab1

a guest
Oct 24th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.22 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4.  
  5. namespace Lab1
  6. {
  7.     class Program
  8.     {
  9.         static int Search(string path, List<string> extensionList, bool isCountingHidden, bool isRecursive) // запускать с проверкой папки
  10.         {
  11.             int count = 0;
  12.             foreach (var file in Directory.GetFiles(path))
  13.             {
  14.                 if (!isCountingHidden)
  15.                 {
  16.                     var attributes = File.GetAttributes(file);
  17.                     if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden) continue;
  18.                 }
  19.  
  20.                 if (extensionList.Count == 0) count++;
  21.                 else
  22.                 {
  23.                     foreach (var extension in extensionList)
  24.                     {
  25.                         if (file.ToUpper().Contains(extension) || file.ToUpper().Contains(extension.Substring(1)))
  26.                         {
  27.                             count++;
  28.                             break;
  29.                         }
  30.                     }
  31.                 }
  32.             }
  33.  
  34.             if (!isRecursive) return count; // если нерекурсивно - возврат значения
  35.  
  36.             // рекурсивный подсчёт
  37.             int sum = 0;
  38.             foreach (var subDirectory in Directory.GetDirectories(path))
  39.                 sum += Search(subDirectory, extensionList, isCountingHidden, true);
  40.  
  41.             count += sum;
  42.             return count;
  43.         }
  44.  
  45.         public static int Main(string[] args)
  46.         {
  47.             string help = "Утилита предназначена для подсчёта количества файлов в папке и её подпапках.\n";
  48.             help += "    [путь к утилите]\\Count [путь к папке] [Расширения: *.exe *.jpg ...] [/A] [/R]\n";
  49.             help += "    /? - справкa\n";
  50.             help += "    /A - считать файлы с аттрибутом \"скрытый\"\n";
  51.             help += "    /R - поиск в подпапках\n";
  52.             help += "  По умолчанию: подсчёт в указанной папке без подпапок и без расширений.\n";
  53.             help += "  Пример: Count.exe Test *.txt *jpg /A /R";
  54.  
  55.             // Показ справки
  56.             if (args.Length == 0)
  57.             {
  58.                 Console.WriteLine(help);
  59.                 //Console.ReadKey();
  60.                 return -3;
  61.             }
  62.  
  63.             //Запуск из терминала
  64.             string path = Environment.CurrentDirectory; // путь к папке (либо просто её название)
  65.             int result = 0; // код ошибки (если < 0) либо кол-во файлов (если >= 0)
  66.             bool isRecursive = false; // рекурсивно ли
  67.             bool isPathOk = false; // правильный ли путь
  68.             bool isCountingHidden = false; //считать ли скрытые
  69.             var extensionList = new List<string>(); // список с расширениями
  70.  
  71.  
  72.             for (int i = 0; i < args.Length && result >= 0; i++) // перебор параметров main
  73.             {
  74.                 switch (args[i]) // просмотр текущего параметра main
  75.                 {
  76.                     case "/?":
  77.                         Console.WriteLine(help); // текущий параметр main явл. ключом справки
  78.                         result = -3;
  79.                         return result;
  80.                     case "/R":
  81.                         isRecursive = true; // текущий параметр main явл. ключом рекурсии
  82.                         break;
  83.                     case "/A":
  84.                         isCountingHidden = true; // текущий параметр main явл. ключом атрибута "скрытый"
  85.                         break;
  86.                     default:
  87.                         if (args[i][0] == '/')
  88.                         {
  89.                             Console.WriteLine("Ошибка! Указан неправильный ключ."); // текущий параметр main явл. неправильным ключом
  90.                             result = -2;
  91.                             return result; // возврат с кодом "-2" - "неправильный ключ"
  92.                         }
  93.                         if (!isPathOk) // проверка на правильность пути
  94.                         {
  95.                             path = args[i];
  96.                             if (Directory.Exists(path))
  97.                             {
  98.                                 isPathOk = true; // текущий параметр main явл. полным путём к папке
  99.                             }
  100.                             else
  101.                             {
  102.                                 path = Environment.CurrentDirectory + @"\" + path;
  103.                                 if (Directory.Exists(path))
  104.                                 {
  105.                                     isPathOk = true; // текущий параметр main явл. названием папки
  106.                                 }
  107.                                 else
  108.                                 {
  109.                                     Console.WriteLine("Ошибка! Указан несуществующий путь к каталогу.");
  110.                                     result = -1;
  111.                                     return result; // возврат с кодом "-1" - "неправильный путь"
  112.                                 }
  113.                             }
  114.                         }
  115.                         else
  116.                         {
  117.                             extensionList.Add(args[i].ToUpper()); // текущий параметр main явл. расширением
  118.                         }
  119.                         break;
  120.                 }
  121.             }
  122.  
  123.  
  124.             result = Search(path, extensionList, isCountingHidden, isRecursive);
  125.             Console.WriteLine(result);
  126.  
  127.             return result;
  128.         }
  129.     }
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement