Pull to refresh

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

Я думаю, что большинство пользователей встречалось с проблемой переполненной папки «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).

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

Спасибо
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.