Оптимизация - C# (204598)

Формулировка задачи:

Ребят как можно оптимизировать программу, слишком уж объемная получилась. Аналог Windows dir Program.cs А то блок схему не могу сделать

Код к задаче: «Оптимизация - C# (204598)»

textual
using System;
using System.Text;
using System.IO;
 
namespace ConsoleApplication20
{
    class Program
    {
        static void dir(string addr, string atr1, string atr2)
        {
            try
            {
                string[] d_n = new string[1000];
                string[] f_n = new string[1000];
                Console.WriteLine("Содержимое папки " + addr);
                Console.WriteLine();
                string[] p = addr.Split(':');
                DriveInfo disk = new DriveInfo(p[0]);
                int katalog = 0;
                int fil = 0;
                string sourceDirectory = addr;
 
                var Dirs = Directory.EnumerateDirectories(sourceDirectory);
                int i = 0;
                foreach (string currentDirectory in Dirs)
                {
                    katalog = katalog + 1;
                    string dirName = currentDirectory.Substring(sourceDirectory.Length + 1);
                    d_n[i] = File.GetLastWriteTime(currentDirectory) + "\t" + "<DIR>" + "\t" + "\t" + "\t" + dirName;
                    i++;
                    //Console.WriteLine(File.GetLastWriteTime(currentDirectory) + "\t" + "<DIR>" + "\t" + "\t" + "\t" + dirName);
                }
                var Files = Directory.EnumerateFiles(sourceDirectory);
                long sizeAll = 0;
 
                int j = 0;
                foreach (string currentFile in Files)
                {
                    string fileName = currentFile.Substring(sourceDirectory.Length + 1);
                    fil += 1;
                    System.IO.FileInfo f2 = new System.IO.FileInfo(currentFile);
                    long size = f2.Length;
                    sizeAll += size;
                    f_n[j] = File.GetLastWriteTime(currentFile) + "\t" + "\t" + size.ToString("n0") + "\t" + "\t" + fileName;
                    j++;
                    //Console.WriteLine(File.GetLastWriteTime(currentFile) + "\t" + "\t" + size.ToString("n0") + "\t" + "\t" + fileName);
                }
 
                switch (atr1)
                {
                    case "/a":
                        switch (atr2)
                        {
                            case "/c":
                                for (int k = 0; k < i; k++) Console.WriteLine(d_n[k]);
                                for (int k = 0; k < j; k++) Console.WriteLine(f_n[k]);
                                break;
                            case "/d":
                                for (int k = i - 1; k >= 0; k--) Console.WriteLine(d_n[k]);
                                for (int k = j - 1; k >= 0; k--) Console.WriteLine(f_n[k]);
                                break;
                            default:
                                for (int k = 0; k < i; k++) Console.WriteLine(d_n[k]);
                                for (int k = 0; k < j; k++) Console.WriteLine(f_n[k]);
                                break;
                        }
                        break;
                    case "/b":
                        switch (atr2)
                        {
                            case "/c":
                                for (int k = 0; k < j; k++) Console.WriteLine(f_n[k]);
                                for (int k = 0; k < i; k++) Console.WriteLine(d_n[k]);
                                break;
                            case "/d":
                                for (int k = j - 1; k >= 0; k--) Console.WriteLine(f_n[k]);
                                for (int k = i - 1; k >= 0; k--) Console.WriteLine(d_n[k]);
                                break;
                            default:
                                for (int k = 0; k < j; k++) Console.WriteLine(f_n[k]);
                                for (int k = 0; k < i; k++) Console.WriteLine(d_n[k]);
                                break;
                        }
                        break;
                    default:
                        switch (atr2)
                        {
                            case "/c":
                                for (int k = 0; k < i; k++) Console.WriteLine(d_n[k]);
                                for (int k = 0; k < j; k++) Console.WriteLine(f_n[k]);
                                break;
                            case "/d":
                                for (int k = i - 1; k >= 0; k--) Console.WriteLine(d_n[k]);
                                for (int k = j - 1; k >= 0; k--) Console.WriteLine(f_n[k]);
                                break;
                            default:
                                for (int k = 0; k < i; k++) Console.WriteLine(d_n[k]);
                                for (int k = 0; k < j; k++) Console.WriteLine(f_n[k]);
                                break;
                        }
                        break;
                }
 
                Console.WriteLine();
                Console.WriteLine("\t" + "\t" + fil + " файлов" + "\t" + sizeAll.ToString("n0") + " байт");
                Console.WriteLine("\t" + "\t" + katalog + " папок" + "\t" + "\t" + disk.AvailableFreeSpace.ToString("n0") + " байт свободно");
            }
            catch
            {
                Console.WriteLine("Неверно введённый адрес!");
                Console.WriteLine("");
            }
        }
 
        static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine("Укажите путь к файлу с командой dir");
                Console.WriteLine("Для вывода справки введите: -?");
                {
                    string adr = "";
                    string a1 = "";
                    string a2 = "";
                    bool q = true;
                    while (q)
                    {
                        try
                        {
                            string com = Console.ReadLine();
                            string[] str = com.Split(' ');
                            switch (str[0])
                            {
                                case "exit":
                                    q = false;
                                    break;
                                case "/?":
                                    Console.WriteLine("");
                                    Console.WriteLine("Справка:");
                                    Console.WriteLine("\t /? - подсказка");
                                    Console.WriteLine("\t exit - выход");
                                    Console.WriteLine("\t dir - вывод файлов и папок в текущем каталоге");
                                    Console.WriteLine("\t dir <адрес> - вывод файлов и папок в указанном каталоге");
                                    Console.WriteLine("\t \t /a - сначала папки потом файлы");
                                    Console.WriteLine("\t \t /b - сначала файлы потом папки");
                                    Console.WriteLine("\t \t /c - сортировать по алфавиту");
                                    Console.WriteLine("\t \t /d - сортировать по алфавиту в обратном порядке");
                                    Console.WriteLine("\t \t примечание - по умолчанию стоят атрибуты /a /c");
                                    break;
                                case "dir":
                                    if (com == "dir")
                                    {
                                        System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(".");
                                        adr = di.FullName;
                                    }
                                    else
                                    {
                                        adr = str[1];
                                    }
                                    switch (str.Length)
                                    {
                                        case 2:
                                            a1 = "/e";
                                            a2 = "/e";
                                            break;
                                        case 3:
                                            a1 = str[2];
                                            a2 = "/e";
                                            break;
                                        case 4:
                                            a1 = str[2];
                                            a2 = str[3];
                                            break;
                                    }
                                    //dir(@"C:\games");
                                    dir(adr, a1, a2);
                                    break;
                                default:
                                    Console.WriteLine("Неверная команда! Используйте команду /? для получения справки.");
                                    Console.WriteLine("");
                                    break;
                            }
                        }
                        catch
                        {
                            Console.WriteLine("Неверная команда! Используйте команду /? для получения справки.");
                            Console.WriteLine("");
                        }
                    }
                }
            }
        }
    }
}

8   голосов, оценка 4.000 из 5


СОХРАНИТЬ ССЫЛКУ