Как стать автором
Обновить

Автоматическая сортировка файлов

Я думаю, что большинство пользователей встречалось с проблемой переполненной папки «Downloads/Загрузки». Надо признать, файлов в этой папке накапливается столько, что вручную удалять их — не вариант. В связи с этим я хочу рассказать, как написать программу, которая позволяет автоматически сортировать эти файлы по папкам. Я уже неоднократно видел различные скрипты, которые делают то же самое, но отличие той программы, которую мы сейчас напишем от этих скриптов в том, что файлы сортируются только при запуске скрипта, а с помощью нашей программы они будут сортироваться по мере появления.

Для реализации данной задачи я выбрал язык C#. Связано это с кроссплатформеностью языка, легкостью в использовании и огромного количества готовых классов.
Начнем.

Для начала подключим необходимые библотеки

using System.Windows.Forms;
using System.IO;


Объявим необходимые нам переменные

public static string[] folders = { "Images", "Music", "Video", "Documents", "Archives", "Executable" };//Названия папок, в которые будем кидать файлы

//Типы файлов, которые мы будем перемещать в определенные папки
        public static string[] ImageTypes = { ".png", ".jpeg", ".bmp", ".gif" };
        public static string[] MusicTypes = { ".mp3", ".wav", ".m4a", ".flac" };
        public static string[] VideoTypes = { ".mp4", ".avi", ".flv", ".wmv" };
        public static string[] DocumentTypes = { ".doc", ".ppt", ".xls", ".txt", ".pdf" };
        public static string[] ArchiveTypes = { ".zip", ".rar" };
        public static string[] ExecutableTypes = { ".exe", ".bat", ".com" };
        public static string[] Trash = {".torrent" };

public static FileInfo info; //Информация о файле


Теперь создадим папки

 foreach(var f in folders)
            {
                if(!Directory.Exists(f))
                {
                    Directory.CreateDirectory(f);
                }
            }


Для постоянного отслеживания появления файлов нам понадобится класс FileSystemWatcher.

 FileSystemWatcher watcher = new FileSystemWatcher(Directory.GetCurrentDirectory(), "*.*");
            watcher.IncludeSubdirectories = false;
            watcher.NotifyFilter = NotifyFilters.FileName|NotifyFilters.Attributes|NotifyFilters.CreationTime;
            watcher.Created += new FileSystemEventHandler(OnCreated);
            watcher.EnableRaisingEvents = true;


Ну а теперь самое главное — обработчик события создания файла.

         public static void OnCreated(object source, FileSystemEventArgs e)
    {

          info = new FileInfo(e.FullPath);

           if(e.FullPath==Application.ExecutablePath)/*Проверка на то, является данный файл тем, который в данный момент исполняется, чтобы не вызвать исключение*/
           {
               return;
           }

           foreach (var type in ImageTypes)
           {
               if (info.Extension == type)
               {
                   info.MoveTo("Images\\" + info.Name);
               }
           }

        foreach (var type in MusicTypes)
        {
            if (info.Extension == type)
            {
                info.MoveTo("Music\\" + info.Name);
            }
        }

        foreach (var type in VideoTypes)
        {
            if (info.Extension == type)
            {
                info.MoveTo("Video\\" + info.Name);
            }
        }

        foreach (var type in DocumentTypes)
        {
            if (info.Extension == type)
            {
                info.MoveTo("Documents\\" + info.Name);
            }
        }

        foreach (var type in ArchiveTypes)
        {
            if (info.Extension == type)
            {
                info.MoveTo("Archives\\" + info.Name);
            }
        }

        foreach (var type in ExecutableTypes)
        {
            if (info.Extension == type)
            {
                info.MoveTo("Executable\\" + info.Name);
            }
        }

        foreach (var type in Trash)
        {
            if (info.Extension == type)
            {
                System.Threading.Thread.Sleep(100);
                info.Delete();
            }
        }
                 

    }


А также, в Main() необходимо добавить бесконечный цикл, чтобы программы не закрывалась
 while(true)
            {

            }


Теперь этот код нужно скомпилировать и перекинуть исполняемый файл в папку «Загрузки». Плюс в том, что этот код можно скомпилировать как под Windows, так и под Linux и Mac(с помощью Mono).

Надеюсь, я сделал вашу жизнь легче.

Спасибо
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.