Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.IO;
- namespace Lab1
- {
- class Program
- {
- static int Search(string path, List<string> extensionList, bool isCountingHidden, bool isRecursive) // запускать с проверкой папки
- {
- int count = 0;
- foreach (var file in Directory.GetFiles(path))
- {
- if (!isCountingHidden)
- {
- var attributes = File.GetAttributes(file);
- if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden) continue;
- }
- if (extensionList.Count == 0) count++;
- else
- {
- foreach (var extension in extensionList)
- {
- if (file.ToUpper().Contains(extension) || file.ToUpper().Contains(extension.Substring(1)))
- {
- count++;
- break;
- }
- }
- }
- }
- if (!isRecursive) return count; // если нерекурсивно - возврат значения
- // рекурсивный подсчёт
- int sum = 0;
- foreach (var subDirectory in Directory.GetDirectories(path))
- sum += Search(subDirectory, extensionList, isCountingHidden, true);
- count += sum;
- return count;
- }
- public static int Main(string[] args)
- {
- string help = "Утилита предназначена для подсчёта количества файлов в папке и её подпапках.\n";
- help += " [путь к утилите]\\Count [путь к папке] [Расширения: *.exe *.jpg ...] [/A] [/R]\n";
- help += " /? - справкa\n";
- help += " /A - считать файлы с аттрибутом \"скрытый\"\n";
- help += " /R - поиск в подпапках\n";
- help += " По умолчанию: подсчёт в указанной папке без подпапок и без расширений.\n";
- help += " Пример: Count.exe Test *.txt *jpg /A /R";
- // Показ справки
- if (args.Length == 0)
- {
- Console.WriteLine(help);
- //Console.ReadKey();
- return -3;
- }
- //Запуск из терминала
- string path = Environment.CurrentDirectory; // путь к папке (либо просто её название)
- int result = 0; // код ошибки (если < 0) либо кол-во файлов (если >= 0)
- bool isRecursive = false; // рекурсивно ли
- bool isPathOk = false; // правильный ли путь
- bool isCountingHidden = false; //считать ли скрытые
- var extensionList = new List<string>(); // список с расширениями
- for (int i = 0; i < args.Length && result >= 0; i++) // перебор параметров main
- {
- switch (args[i]) // просмотр текущего параметра main
- {
- case "/?":
- Console.WriteLine(help); // текущий параметр main явл. ключом справки
- result = -3;
- return result;
- case "/R":
- isRecursive = true; // текущий параметр main явл. ключом рекурсии
- break;
- case "/A":
- isCountingHidden = true; // текущий параметр main явл. ключом атрибута "скрытый"
- break;
- default:
- if (args[i][0] == '/')
- {
- Console.WriteLine("Ошибка! Указан неправильный ключ."); // текущий параметр main явл. неправильным ключом
- result = -2;
- return result; // возврат с кодом "-2" - "неправильный ключ"
- }
- if (!isPathOk) // проверка на правильность пути
- {
- path = args[i];
- if (Directory.Exists(path))
- {
- isPathOk = true; // текущий параметр main явл. полным путём к папке
- }
- else
- {
- path = Environment.CurrentDirectory + @"\" + path;
- if (Directory.Exists(path))
- {
- isPathOk = true; // текущий параметр main явл. названием папки
- }
- else
- {
- Console.WriteLine("Ошибка! Указан несуществующий путь к каталогу.");
- result = -1;
- return result; // возврат с кодом "-1" - "неправильный путь"
- }
- }
- }
- else
- {
- extensionList.Add(args[i].ToUpper()); // текущий параметр main явл. расширением
- }
- break;
- }
- }
- result = Search(path, extensionList, isCountingHidden, isRecursive);
- Console.WriteLine(result);
- return result;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement