Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2013, 13:53   #1
Byshlata
Новичок
Джуниор
 
Регистрация: 24.03.2013
Сообщений: 5
По умолчанию Удаление файлов и директорий

Ребят помогите, во значит задание:

Создать программу для поиска по всему диску файлов и каталогов, удовлетворяющих заданной маске. Необходимо вывести найденную информацию на экран в компактном виде (с нумерацией объектов) и запросить у пользователя о дальнейших действиях. Варианты действий: удалить все найденное, удалить указанный файл (каталог), удалить диапазон файлов (каталогов).

Поиск я сделал, все результаты поиска занес в массив. теперь вопросы только с организациеей пользовательских функций, удалить файл/директорию. Метод для удаления файла и директории я написал, просто вопрос в друго, как мне различить что является файлом а что директорией? ведь у меня все в одном массиве, и если пользователь выберет удалить файл, то я не могу прогонять этот "член массива" и по в методе удаления файла и в методе удаления директории, т.к. метод удаления директории выдаст ошибку.
Заранее благодарен
Byshlata вне форума Ответить с цитированием
Старый 24.03.2013, 14:41   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Файлы и директории можно различить по атрибутам.
Значит, нужно анализировать атрибуты. Это можно сделать, минимум, двумя способами:
1. Анализировать сразу, после чего распихивать по двум разным массивам.
2. Отложить анализ на потом, тогда в массиве нужно сохранять еще и атрибуты.
s-andriano вне форума Ответить с цитированием
Старый 24.03.2013, 15:13   #3
Byshlata
Новичок
Джуниор
 
Регистрация: 24.03.2013
Сообщений: 5
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Файлы и директории можно различить по атрибутам.
Значит, нужно анализировать атрибуты. Это можно сделать, минимум, двумя способами:
1. Анализировать сразу, после чего распихивать по двум разным массивам.
2. Отложить анализ на потом, тогда в массиве нужно сохранять еще и атрибуты.
Это я понимаю просто не знаю при помощи чего реализовать. Я использую однонаправленный список List <string> для хранения информации. Что мне еще использовать чтобы привезать к к каждому "пути" еще и атрибут "файл/директория". вунаправленный цикл или сделать класс или использовать структуру?
Byshlata вне форума Ответить с цитированием
Старый 24.03.2013, 16:33   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Я бы использовал массив структур.
Но, не зная особенностей проекта, трудно что-то осмысленно посоветовать.
s-andriano вне форума Ответить с цитированием
Старый 24.03.2013, 19:58   #5
Byshlata
Новичок
Джуниор
 
Регистрация: 24.03.2013
Сообщений: 5
По умолчанию

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
    class FileDir {
        public string Name;
        public int DirFile;
        public FileDir(string Name,int DirFile) {
            this.Name = Name;
            this.DirFile = DirFile;
            
        }
    }
    class Program
    {
        static void  POISKKOREN (string file, string Dir, ref List <FileDir> allList)
        {
            try
            {
                string[] MyDir1 = Directory.GetDirectories(@Dir, @"*", SearchOption.TopDirectoryOnly);
                string [] MyDir = Directory.GetDirectories(@Dir, @file, SearchOption.TopDirectoryOnly);
                string[] MyFile = Directory.GetFiles(@Dir, @file, SearchOption.TopDirectoryOnly);
                foreach (string b in MyFile)
                {
                    allList.Add(new FileDir (b,-2));
                }
                foreach (string a in MyDir1)
                {string[] MyDirDir1 = Directory.GetDirectories(a, @file, SearchOption.AllDirectories);
                    
                   string [] MyDirDir = Directory.GetFiles(a, @file, SearchOption.AllDirectories);
                    foreach (string b in MyDirDir)
                    {
                       allList.Add(new FileDir (b,-2)); 
                    }
                }
                foreach (string a in MyDir1)
                {
                    string[] MyDirDir1 = Directory.GetDirectories(a, @file, SearchOption.AllDirectories);
                    foreach (string b in MyDirDir1)
                    {
                        allList.Add(new FileDir(b, -1));
                    }
                } 
                foreach (string b in MyDir)
                {
                    allList.Add(new FileDir (b,-1));
                }
                if (allList.Count == 0 && MyFile.Length==0) { throw new Exception(); }

            }
            
            catch (FormatException) { Console.WriteLine("НЕКОРРЕКТНЫЙ ВВОД ПАРАМЕТРОВ ПОИСКА"); }
            catch (Exception)
            {
                Console.WriteLine("ФАЙЛ НЕ НАЙДЕН");
                Console.WriteLine("ПРОВЕРТЕ ПРАВИЛЬНОСТЬ ЗАДАНИЯ ПАРАМЕТРОВ ПОИСКА");
            }
        }
        static void Vivod(List<FileDir> mass)
        {
            Console.WriteLine("------------------");
            int i = 0;
            foreach (FileDir b in mass)
            {
                string h = b.Name;
                Console.WriteLine(++i + "." + h);
            }
            Console.WriteLine("------------------");
        }
        
        static void deleteArray(ref List<string> allListmain, int nomer,int collichestvo)
        {
            allListmain.RemoveRange(nomer, collichestvo);
        }

Последний раз редактировалось Stilet; 24.03.2013 в 20:16.
Byshlata вне форума Ответить с цитированием
Старый 24.03.2013, 19:59   #6
Byshlata
Новичок
Джуниор
 
Регистрация: 24.03.2013
Сообщений: 5
По умолчанию

Код:
static void Delete(ref List<FileDir> allListmain, int nomer)
        {
            FileDir b = allListmain[nomer - 1];
            int h = b.DirFile;
            if (h == -1)
            {
                Directory.Delete(b.Name, true);
            }
            else
            { File.Delete(b.Name);}
            allListmain.RemoveRange(nomer - 1, 1);
        }

        static void Delete(ref List<FileDir> allListmain, int First, int Last)
        {
            for (int i = First; i <= Last; i++)
            {
                FileDir b = allListmain[i - 1];
                int h = b.DirFile;
                if (h == -1)
                {
                    Directory.Delete(b.Name, true);
                }
                else
                { File.Delete(b.Name);
}
            }
            
                allListmain.RemoveRange(First - 1, Last-First+1);
        }
        static void Ex1()
        {
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine("НЕВЕРНЫЙ ФОРМАТ ВВОДА!");
            Console.WriteLine();
            Console.WriteLine();
                          }
        static void Ex2()
        {
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine("ЗНАЧЕНИЯ ВВЕДЕНЫ НЕКОРРЕКТНО!");
            Console.WriteLine();
            Console.WriteLine();
        }

        static void Ex3()
        {
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine("ФАЙЛЫ/ДИРЕКТОРИИ УДАЛЕНЫ!");
            Console.WriteLine();
            Console.WriteLine();
        }

Последний раз редактировалось Stilet; 24.03.2013 в 20:16.
Byshlata вне форума Ответить с цитированием
Старый 24.03.2013, 19:59   #7
Byshlata
Новичок
Джуниор
 
Регистрация: 24.03.2013
Сообщений: 5
По умолчанию

Код:
static void Main(string[] args)
        {
            int YESNO = 1;
            while (YESNO==1)
            {     try {
                   List<FileDir> allListmain = new List<FileDir>(1000);
                   Console.WriteLine("ВВЕДИТЕ ИМЯ ФАЙЛА/ДИРЕКТОРИИ ПОИСКА");
                    string file = Console.ReadLine();
                    Console.WriteLine("ВВЕДИТЕ ДИРИКТОРИЮ ПОИСКА");
                    string Dir = Console.ReadLine();
                    POISKKOREN(file, Dir, ref allListmain);
                    Console.WriteLine("РЕЗУЛЬТАТЫ ПОИСКА:");
                    Console.WriteLine();
                    Vivod(allListmain);

                    while (true)
                    {
                        try
                        {
                            Console.WriteLine("1.НОВЫЙ ПОИСК");
                            Console.WriteLine("2.УДАЛИТЬ ФАЙЛ/ДИРЕКТОРИЮ");
                            Console.WriteLine("3.УДАЛИТЬ ДИАПОЗОН ФАЙЛОВ/ДИРЕКТОРИЙ");
                            Console.WriteLine("4.УДАЛИТЬ ВСЕ");
                            int t = int.Parse(Console.ReadLine());
                            if (t == 1)
                            {
                                break;
                            }
                            else
                            {
                                if (t == 2)
                                {
                                    try
                                    {
                                        Console.WriteLine("ВВЕДИТЕ НОМЕР ФАЙЛА/ДИРЕКТОРИИ");
                                        int nomer = int.Parse(Console.ReadLine());
                                        Delete(ref allListmain, nomer);
                                        Ex3();
                                        Vivod(allListmain);

                                    }
                                    catch (FormatException)
                                    {
                                        Ex1();
                                    }
                                    catch (ArgumentOutOfRangeException)
                                    {
                                        Console.WriteLine();
                                        Console.WriteLine();
                                        Console.WriteLine("НОМЕР ВВЕДЕННОГО ФАЙЛА/ДИРЕКТОРИИ НЕ НАЙДЕН!");
                                    }
                                }
                                else
                                {
                                    if (t == 3)
                                    {
                                        try
                                        {
                                            Console.WriteLine("ВВЕДИТЕ НОМЕР С КОТОРОГО НАЧАТЬ УДАЛЕНИЕ");
                                            int first = int.Parse(Console.ReadLine());
                                            Console.WriteLine("ВВЕДИТЕ НОМЕР ДО КОТОРОГО УДАЛЯТЬ");
                                            int Last = int.Parse(Console.ReadLine());
                                            if (first < 1 || first > allListmain.Count || Last < first || Last > allListmain.Count) { throw new Exception(); }

                                            Delete(ref allListmain, first, Last);

                                            Vivod(allListmain);
                                            Ex3();
                                        }

                                        catch (FormatException)
                                        {
                                            Ex1();
                                        }
                                        catch (Exception)
                                        {
                                            Ex2();
                                        }
                                    }
                                    else
                                    {
                                        if (t == 4)
                                        {
                                            
                                                Delete(ref allListmain, 1, allListmain.Count);
                                                Ex3();
                                            
                                        }


                                        else { if (t < 0 || t > 4) { throw new Exception(); } }
                                    }
                                }

                            }
                        }

                        catch (Exception){Ex1(); }
                    }
                
                }
                     catch (FormatException) { Ex1(); }

            }
        }
    }
}

Последний раз редактировалось Stilet; 24.03.2013 в 20:15.
Byshlata вне форума Ответить с цитированием
Старый 24.03.2013, 21:48   #8
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Да просто храни в двух разных массивах и не мучайся.
Son Of Pain вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание/изменение/удаление файлов в потоке. Мониторинг файлов в потоке. The Real Kos Общие вопросы Delphi 5 22.10.2012 23:58
Копирование файлов из нескольких директорий в одну artemavd Общие вопросы Delphi 21 24.11.2010 19:27
удаление файлов Leo20 Общие вопросы Delphi 5 22.11.2009 08:22
Удаление файлов Amery Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 04.05.2008 14:46
Создание - Удаление папок (директорий) Kocapb Общие вопросы C/C++ 5 20.12.2007 09:28