Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рaбота с дисками и папками. 
:(
    Опции темы
Leshakk
Дата 28.11.2022, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 28.11.2022

Репутация: нет
Всего: нет



Добрый день. Подскажите пожалуйста, возможно ли это упростить? Или сократить?

Задача, есть каталог, который строго определен, меняться динамически не будет и должен лежать строго на диске P:\

Программа проверяет есть ли раздел/том/диск P?
Код:
Код

public static void CheckDriveInfo()
        {
            DriveInfo[] drives = DriveInfo.GetDrives();
            bool x = false;
            foreach (DriveInfo drive in drives)
            {
                if (drive.IsReady && drive.Name == "P:\\")
                {
                    x = true;
                    Console.WriteLine($"Название: {drive.Name}");
                    Console.WriteLine($"Тип: {drive.DriveType }");
 
                    Console.WriteLine($"Объем диска: {drive.TotalSize / 1073741824} Gb"); //конвертация кб в гб
                    Console.WriteLine($"Свободное пространство: {drive.TotalFreeSpace / 1073741824} Gb");
                    //Console.WriteLine($"Метка диска: {drive.VolumeLabel}");
                    break;
                }
            }
            if (x == false)
                Console.WriteLine("На вашем компьюетере нет диска P:\\");
        }


Затем начинает проверять все папки сверху до низу. Если есть нужная папка -ок! Если нет создаем. Проверяем наличие левых папок с левыми именами, находим убиваем. Переходим на уровень ниже.
И вот тут начинается веселье. Это что получается для каждого уровня вот такой кусок кода? И чем глубже в иерархию тем запутанее? А если несколько веток будет, это же вообще с ума сойти можно.
код:
Код

public static void DirCorrIgnor_IncorrDell_NoCreate()
        {
            string dirName = "P:\\2020Test";
             string dirName_a = "P:\\2020Test\\a";
            string dirName_b = "P:\\2020Test\\b";
 
            string dirName_a_1 = "P:\\2020Test\\a\\1";
            string dirName_a_2 = "P:\\2020Test\\a\\2";
 
            
 
            // если папка существует
            if (Directory.Exists(dirName))
            {
                Console.WriteLine("Имеются следующие папки:");
                string[] dirs = Directory.GetDirectories(dirName);
 
                foreach (string s in dirs)
                {
                    Console.WriteLine(s);
                    if ((s == dirName_a) || (s == dirName_b))
                        continue;
                    else
                        Directory.Delete(s, true);
                }
 
                DirectoryInfo dirInfo = new DirectoryInfo(dirName_a);
                if (!dirInfo.Exists)
                    dirInfo.Create();
               
                DirectoryInfo dirInfo2 = new DirectoryInfo(dirName_b);
                if (!dirInfo2.Exists)
                    dirInfo2.Create();
                //-------------------------------------------------------
                string[] dirs2 = Directory.GetDirectories(dirName_a);
 
                foreach (string s1 in dirs2)
                {
                    Console.WriteLine(s1);
                    if ((s1 == dirName_a_1) || (s1 == dirName_a_2))
                        continue;
                    else
                        Directory.Delete(s1, true);
                }
 
                DirectoryInfo dirInfo3 = new DirectoryInfo(dirName_a_1);
                if (!dirInfo3.Exists)
                    dirInfo3.Create();
 
                DirectoryInfo dirInfo4 = new DirectoryInfo(dirName_a_2);
                if (!dirInfo4.Exists)

                    dirInfo4.Create();
            }
        }


Есть еще вот такие размышления:

Можно конечно проверять ветки целиком
P:\\2020Test\\a\\1";
Потом
P:\\2020Test\\a\\2";
потом
P:\\2020Test\\b\\1";
потом
P:\\2020Test\\b\\2";

И так же целиком их убивать при наличии ошибки.
Например если есть
P:\\2020Test\\b\\аброкодабра";
то ее целиком убить и создать
P:\\2020Test\\b\\1";
и
P:\\2020Test\\b\\2";

Но из за одной аброкадабры, которая лежит в самом низу, убивать всю ветку, как то зверски. А если там еще и файлы лежат....
Поэтому хотелось бы иметь контроль не тлько по веткам а еще и по глубине.
Например
P:\\2020Test проверка и какие-то действия если надо
потом
P:\\2020Test\\b проверка и какие-то действия если надо
потом
P:\\2020Test\\b\\1"; проверка и какие-то действия если надо

И вот тут приходит единственная мысль на ум, создать один метод, который принимает в качестве аргумента кусок пути, и обрабатывает его, проверяет наличие, чистит, убивает лишнее, создает чего нехватает.

Все куски путей от P:\ до P:\\2020Test\\b\\1"; и по всем веткам, загнать в массив. Так продумать тобы в маасиве куски путей были в правильной последвоательности

И в цикле обрабатывать этот массив одним методом, в параметрах меняя лишь индекс элемента.

С учетом того что дирректория, хоть и большая, но конечная, это все реально сделать руками.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0966 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.